在c++中处理浮点数或双精度数.表示错误.丢失十进制值

Working around float or double numbers in C++. Errors of representation. Loss of decimal values

本文关键字:错误 表示 十进制 双精度 c++ 处理 浮点数      更新时间:2023-10-16

我听说C/c++在浮点数的管理上有问题。我已经实现了一个简单的程序来尝试。它由一个找零机组成:用户输入要收费的数量和支付的数量,程序计算每种硬币类型的硬币数量作为找零。

链接到我的谷歌驱动器文件夹与代码

问题是,当你插入一个非整数值时,程序进入一个循环并且永远不会结束。我已经打印了变量的内容以了解发生了什么,并且不知何故,从一个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

C和c++都没有浮点值的问题。作为程序员,您可以在任何支持浮点数的语言中正确地使用它。

整数变量不能存储分数和越界值,而浮点变量只能存储分数的特定子集。高质量的浮点实现也为计算的准确性提供了严格的保证。

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