gpt4 book ai didi

java - 类型转换 Math.pow() 时精度损失

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:53:02 27 4
gpt4 key购买 nike

我试图计算 int 的最大值,但是我不明白为什么转换为 int 的计算值低于转换为 long 的计算值。我在计算器上计算了(2^31) - 1,结果是

2_147_483_647

当我在 Java 中增加 2^31 并扣除 1 时,我会期望相同,它应该计算 int 2147483647 的最大数量,但事实并非如此。

System.out.println(((long) Math.pow(2, 31)) - 1); 
System.out.println((int) Math.pow(2, 31) - 1);

第一次计算给出:2_147_483_647

第二次计算给出:2_147_483_646

最佳答案

转换优先于减法。你应该先做减法:

 System.out.println((int) (Math.pow(2, 31) - 1)); 
  • Math.pow(2, 31)2_147_483_648,类型为 double(因为 Math.pow() 返回a double) ,这个数字不适合 int。

  • 当您将 double 2_147_483_648 转换为 int 时,它会被截断为 int 可以容纳的最大值(请参阅 How does double to int cast work in Java )。

  • 转换将 double 2_147_483_648 截断为整型 2_147_483_647

  • 然后您的代码减去 1,并以 2_147_483_646 结尾。

关于java - 类型转换 Math.pow() 时精度损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47697294/

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