Почему я получаю странный результат за эту сумму, используя Android на Java? - PullRequest
0 голосов
/ 06 июня 2011

Так что я делаю что-то очень простое.У меня есть две переменные экземпляра, newX и newY.Обе эти двойники инициализируются равными 0,0.

Во время цикла обновления я выполняю следующие вычисления:

long now = System.currentTimeMillis();
double elapsed = (now - mNextTime)/1000.0; // convert to seconds
Log.i("nx", newX + " + " + elapsed + " = " + (newX + elapsed));
newX = newX + elapsed;
newY  = newY + elapsed;

Вот несколько итераций оператора ведения журнала, это я не могу объяснить:

1.3073173811609962E9 + 0.058 = 1.3073173812189963E9
1.3073173812189963E9 + 0.112 = 1.3073173813309963E9
1.3073173813309963E9 + 0.02 = 1.3073173813509963E9
1.3073173813509963E9 + 0.018 = 1.3073173813689961E9
1.3073173813689961E9 + 0.018 = 1.307317381386996E9
1.307317381386996E9 + 0.101 = 1.307317381487996E9

Почему 1,307 + 0,112 = 1,307 ??Я очень смущен.

1 Ответ

7 голосов
/ 06 июня 2011

Обратите внимание на E9.Вы смотрите на очень большие числа.

1E9 = 1 000 000 000

, поэтому

1.3073173811609962E9 + 0.058 = 1 307 317 381,21899623

...