Это не дубликат знаменитой Неисправна математика с плавающей запятой, даже если она выглядит как на первый взгляд.
Я читаю double
из текстового файла с помощью fscanf(file, "%lf", &value);
и сравнивая его с оператором ==
с двойным литералом. Если строка совпадает с литералом, будет ли сравнение с использованием ==
be true
во всех случаях?
Пример
Содержимое текстового файла:
7.7
Фрагмент кода:
double value;
fscanf(file, "%lf", &value); // reading "7.7" from file into value
if (value == 7.7)
printf("strictly equal\n");
Ожидаемый и фактический результат
strictly equal
Но это предполагает, что компилятор преобразует двойной литерал 7.7
в double точно так же, как и функция fscanf
, но компилятор может использовать или не использовать одну и ту же библиотеку для преобразования строк в double.
Или спросил иначе: преобразует ли строка из строки в двойной результат в уникальное двоичное представление или могут быть небольшие различия, зависящие от реализации?