这就是存在精度错误故障的线路;
A[i]= m % 3;
m 很长 A是int[]; 我的错误是 错误:可能会损失精度 A[i]=m%3。 必需的整数 发现很长。
当唯一可能的答案是 0,1,2 时,我怎么会出错呢? 除了将 A 声明为 long[] 之外,还有其他方法吗? 这是一个潜在的大数组,所以我不希望这样(事实上我什至更喜欢 A 短[]) 我还尝试了错误: A[i]= m % 3L ,但结果相同。
最佳答案
编译器不查看结果,而是查看类型。 m%3
的类型是 long
,并且您正尝试将其放入 int
中。
因此,编译器很生气,因为存储在 long
中的值可能比存储在 int
中的值大。
为了解决这个问题,您必须将结果转换回 int
:
A[i] = (int) (m % 3);
但是,您可以这样做,因为您知道结果是 0,1 或 2。如果您不知道要转换的 long
的值,则可能会出现整数溢出:
public static void main(String[] args) {
long l = Integer.MAX_VALUE + 1L;
System.out.println(l);
// 2147483648
System.out.println((int)l);
// -2147483648
}
关于java - 使用 mod 可能会损失精度(但事实并非如此),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37548399/