2013-04-18 4 views
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.

Почему это происходит? и каков реальный ответ на этот математический вопрос?

+0

Какой язык программирования это в? – Acebulf

+0

это язык Java. но я думаю, что каждый язык имеет такую ​​же проблему, когда я использую 64-битное целое число. – Nagi

+0

Почему вы ожидаете '0xeaaeb43e477b8487L', так или иначе? Каково значение этих трех магических шестнадцатеричных чисел, объединенных вместе? – Makoto

ответ

3

Это потому, что когда вы делите 0xeaaeb43e477b8487L/0x6869, вы теряете остаток, что приводит к потере точности.

0xeaaeb43e477b8487L % 0x6869= -9238 

если мы примем это во внимание, мы получим

0xEAAEB43E477BA89DL -9238 = 0xeaaeb43e477b8487 

это работает

if ((l - 9238) == 0xeaaeb43e477b8487L) 
    System.out.println("Correct!"); 
Смежные вопросы