И когда я читал главу о плавающих точках в C++ Primier Plus.Почему значение точки с плавающей точкой?
Он привел пример, как показано ниже:
#include <iostream>
int main(){
using namespace std;
float a = 2.34E+22f;
float b = a + 1.0f;
cout << "a =" << a <<endl;
cout << "b -a =" << b - a<< endl;
return 0;
}
И его результат:
a = 2.34e+22
b -a = 0
Объяснение от книги, и я цитирую:
«Проблема состоит в том, что 2.34E + 22 представляет число с 23 цифрами слева от десятичного разряда . Добавив 1, вы пытаетесь добавить 1 к 23-я цифра в этом номере. Но тип float может представлять только первые 6 или 7 цифр в количестве, поэтому попытка изменить 23-я цифра не влияет на значение. "
Но я не понимаю. Может кто-нибудь помочь мне понять, почему б -а 0 в понятной форме, пожалуйста?
Ухм, это объяснение совершенно ясно, какая часть его вы не понимаете? –
Говорят, что 'float' недостаточно точен, чтобы иметь возможность хранить разницу между 23 400 000 000 000 000 000 000 и 23 400 000 000 000 000 000 000. – dreamlax
Спасибо всем! От Юхао и ответа Джеффри. Поплавок хранится как одноточечная с форматом + -m * 2^x. m больше 2^23 больших, что объясняет, почему float может представлять первые 6 или 7 цифр в десятичном числе. – BBai