gpt4 book ai didi

java - 为什么Math.sqrt()在java中输出错误的值?

转载 作者:行者123 更新时间:2023-12-02 06:00:12 24 4
gpt4 key购买 nike

long mynum = Long.parseLong("7660142319573120");
long ans = (long)Math.sqrt(mynum) // output = 87522239
long ans_ans = ans * ans;

在这种情况下,我得到的 ans_ans > mynum 应该是 <=mynum。为什么会有这样的行为?我也用 Node.js 尝试过。结果也是一样的。

最佳答案

Math.sqrt运行于 double s,不是long s,所以mynum转换为 double第一的。这是一个 64 位 float ,具有“15-17 位十进制精度”( Wikipedia )。

您输入的数字有 16 位,因此您可能已经失去了输入的精度。您还可能会失去输出的精度。

如果你确实需要 long 的整数平方根数字,或者通常是太大而无法准确表示为 double 的数字。 ,查看integer square root算法。

您还可以使用 LongMath.sqrt() 来自 Guava 库。

关于java - 为什么Math.sqrt()在java中输出错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42267940/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com