15精度点双精度变量在C ++中舍入不正确

时间:2019-10-02 09:02:49

标签: c++ rounding rounding-error

如果我输入值:3.123456789012345e-09

我应该回来3.12345678901235e-09

但是只会四舍五入到.6到.9

ostringstream os;

double d = 3.123456789012345e-09 ;

os << setprecision( 15 );

os << d;

istringstream is ( os.str() );

is >> setprecision( 15) >> d;
std::cout << d << std::endl;

真正可笑的事情是: 舍入行为根据幂而变化:

3.123456789012345e-09 = 3.12345678901234e-09

3.123456789012345e-10 = 3.12345678901234e-10

3.123456789012345e-11 = 3.12345678901235e-11

3.123456789012345e-14 = 3.12345678901235e-14

每1000次幂正确舍入...我很困惑。我知道,取整有点怪异,但是我无法对此做出正面或反面的解释。在64位机器上顺便说一句。

0 个答案:

没有答案