我现在正在制作一个计算长整数的源代码,但我不知道为什么这个计算会给我错误的答案。
long l;
//variable l is where you input long, signed int
l *= 0x6869L;
if(l == 0xeaaeb43e477b8487L)
System.out.println("Correct!");
我做了0xeaaeb43e477b8487 / 0x6869 = 0xFFFFCBBB6D375815 但是当我计算0xFFFFCBBB6D375815 * 0x6869时会给出0xEAAEB43E477BA89D。
为什么会发生这件事?这个数学问题的真正答案是什么?
答案 0 :(得分:3)
这是因为当你划分0xeaaeb43e477b8487L / 0x6869时会丢失余数,这会导致精度损失。
0xeaaeb43e477b8487L % 0x6869= -9238
如果我们考虑到这一点,我们会得到
0xEAAEB43E477BA89DL -9238 = 0xeaaeb43e477b8487
这是有效的
if ((l - 9238) == 0xeaaeb43e477b8487L)
System.out.println("Correct!");