Почему C и Java плавают по-разному?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему C и Java плавают по-разному?

Сообщение Anonymous »

Рассмотрим число с плавающей запятой 0,644696875. Давайте преобразуем его в строку с восемью десятичными знаками, используя Java и C:

Java

Код: Выделить всё

import java.lang.Math;
public class RoundExample{
public static void main(String[] args){
System.out.println(String.format("%10.8f",0.644696875));
}
}
результат: 0,64469688

попробуйте сами: http://tpcg .io/oszC0w

C

Код: Выделить всё

#include 

int main()
{
printf("%10.8f", 0.644696875); //double to string
return 0;
}
результат: 0,64469687

попробуйте сами: http://tpcg .io/fQqSRF

Вопрос

Почему последняя цифра отличается?

Фон

Число 0,644696875 не может быть представлено точно как номер машины. Оно представлено в виде дроби 2903456606016923 / 4503599627370496, которая имеет значение 0,6446968749999999

Это, по общему признанию, крайний случай. Но мне действительно интересно узнать источник разницы.

Связано: https://mathematica.stackexchange.com/q ... rm-double- округление чисел

Подробнее здесь: https://stackoverflow.com/questions/577 ... ifferently
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»