2

我现在正在制作一个计算长整数的源代码,但我不知道为什么这个计算给了我错误的答案。

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。

为什么会发生这种事情?这个数学问题的真正答案是什么?

4

1 回答 1

3

这是因为当您将 0xeaaeb43e477b8487L / 0x6869 相除时,您会丢失余数,从而导致精度损失。

0xeaaeb43e477b8487L % 0x6869= -9238

如果我们考虑到它,我们会得到

0xEAAEB43E477BA89DL -9238 =  0xeaaeb43e477b8487

这行得通

if ((l - 9238) == 0xeaaeb43e477b8487L)
    System.out.println("Correct!");
于 2013-04-18T03:45:18.333 回答