在C ++中使用float或double数字。代表性的错误。十进制值丢失

时间:2014-03-29 15:13:23

标签: c++ c floating-point representation

我听说C / C ++在浮点数管理方面存在问题。 我已经实现了一个简单的程序来尝试它。它包含一个更换机器:用户输入要收费的数量和支付的数量,程序计算每种硬币类型的硬币数量作为变化。

以下是代码:Link to my google drive folder with the code

问题是,当你插入一个非整数值时,程序进入循环并永远不会结束。 我打印了变量的内容以找出发生了什么,并且,不知何故,从2的十进制值开始,让我们说:0.10,程序将其值更改为0.0999998。 然后,要处理的剩余更改永远不会为0,并且它将进入无限循环。

我听说这是由于浮点数的机器表示。我已经尝试过相同的Windows和Linux;并且还用Java编程,但我不记得在pascal中遇到过相同的问题。

嗯,现在的问题是:对此最好的解决方法是什么? 我认为一种可能的解决方案是使用定点表示,通过外部库:http://www.trenki.net/content/view/17/1/http://www.codef00.com/code/Fixed.h。其他可能是使用精度算术库:GMP

1 个答案:

答案 0 :(得分:3)

C和C ++都没有浮点值问题。作为程序员,您可以使用支持它的任何语言来适当地使用浮点。

虽然整数变量不能存储分数或超出边界值,但浮点数只能存储分数的特定子集。高质量的浮点实现也为计算的准确性提供了严格的保证。

浮点数不是有理数,需要无限空间才能可靠存储。