【发布时间】:2021-08-23 05:44:25
【问题描述】:
我正在编写一个网络计算器的方法,该方法计算需要多少位来提供多个主机。这是给我一些问题的代码:
int hostBits = (int) Math.ceil(Math.log(hosts) / Math.log(2));
它适用于小数字,但当我输入大数字时会出现问题,例如 2^31 - 2,因为Math.log(hosts) / Math.log(2)(更改对数的底数)的结果实际上应该是 31.0是 31.000000000000004。
然后,Math.ceil(...) 将 31.000000000000004 带到 32,而不是我想要的 31。
有人知道如何解决这个问题吗?
【问题讨论】:
-
你检查过 Math.round() 方法了吗? 31.505 的预期输出是多少?
-
我在运行
System.out.println(((int) Math.ceil(Math.log((1 << 31) - 2) / Math.log(2))));时看到31,你能提供一个Minimal, Reproducible Example吗?