【发布时间】:2021-03-30 12:11:29
【问题描述】:
我们需要使用 long 和 Long.toUnsignedString() 作为大米的类型,但是 Math.Power 将其更改为 double:
package com.company;
public class Main {
public static void main(String[] args) {
int rk = 0;
for (byte feld = 1; feld < 65; feld++) {
System.out.println("Feld: " + feld + ", Reiskörner: " + Math.pow(2, rk));
rk = rk+1;
}
}
}
我测试了很多东西,但没有任何效果。 输出是:
Feld: 1, Reiskörner: 1.0
Feld: 2, Reiskörner: 2.0
Feld: 3, Reiskörner: 4.0
...
Feld: 63, Reiskörner: 4.6116860184273879E18
Feld: 64, Reiskörner: 9.223372036854776E18
安装于:
Feld: 1, Reiskörner: 1
Feld: 2, Reiskörner: 2
...
【问题讨论】:
-
你可以只使用类型转换...?
-
如果你不喜欢
double -
使用
1L << rk代替Math.pow(2, rk),至少对于[0, 62] 范围内的rk。它效率更高,结果已经是long。对于超出该范围的rk,数学结果不能用long类型表示(因此使用pow()并将结果转换为long也不会更好)。对于 63 的rk,移位将产生一个大的负数,而对于更大或负的rk,它将产生 0。