long mynum = Long.parseLong("7660142319573120");
long ans = (long)Math.sqrt(mynum) // output = 87522239
long ans_ans = ans * ans;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到ans_ans> mynum,它应该是<= mynum.为何如此行为?我也尝试使用节点js.结果也一样.
Math.sqrt
在double
s而不是long
s上运行,因此mynum
转换为double
第一个.这是一个64位浮点数,具有"15-17十进制数字的精度"(维基百科).
您的输入数字有16位数,因此您可能已经失去输入的精度.您可能也会失去输出的精度.
如果你真的需要一个整数平方根long
数,或者通常数字太大而无法准确表示为a double
,请查看整数平方根算法.
您也可以使用LongMath.sqrt()
Guava图书馆.
归档时间: |
|
查看次数: |
1398 次 |
最近记录: |