У меня этот код на C, где я объявлял 0.1 как double.
#include <stdio.h>
int main() {
double a = 0.1;
printf("a is %0.56f\n", a);
return 0;
}
Это то, что он печатает, a is 0.10000000000000001000000000000000000000000000000000000000
Тот же код в C++,
#include <iostream>
using namespace std;
int main() {
double a = 0.1;
printf("a is %0.56f\n", a);
return 0;
}
Это то, что он печатает, a is 0.1000000000000000055511151231257827021181583404541015625
В чем разница? Когда я читаю, оба выделены 8 байтами? Как C++ печатает больше цифр в десятичных знаках?
Также, как он может идти до 55 знаков после запятой? Плавающая точка IEEE 754 имеет только 52 бит для дробного числа, с помощью которых мы можем получить 15 десятичных цифр точности. Он хранится в двоичном формате. Почему его десятичная интерпретация хранит больше?