没有精度的双值减法

时间:2015-09-22 18:00:02

标签: c++ double

int base = 12;

double number = 12.2112;

double c = number - base;
//// c=0.211199999999999983   

这是c ++代码, 我怎么能得到结果:c = 0.2112,

1 个答案:

答案 0 :(得分:0)

0.2112无法用浮点表示法精确表示:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

如果对您来说非常重要,那么0.2112应该完全代表,那么通常的解决方案看起来有点像这样:

int base = 120000;
int number = 122112;
int c = number - base;

cout << "Value of c: " << (c / 10000.0) << endl;

但是,要知道我们在这里所做的是实现定点数。如果你的实现中需要定点数,那么研究和实现一个完整的定点课可能是值得的,它可以完成你在这里尝试完成的所有事情。