gpt4 book ai didi

c++ - 在 C++ 中处理 float 或 double 。表述错误。小数值丢失

转载 作者:行者123 更新时间:2023-11-30 18:41:13 24 4
gpt4 key购买 nike

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

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

问题是,当您插入非整数值时,程序会进入循环并且永远不会结束。我已经打印了变量的内容来了解​​发生了什么,并且不知何故,从 2 个小数值(例如:0.10)开始,程序将其值更改为 0.0999998。那么,剩余要处理的变化永远不会是0,并且进入无限循环。

我听说这是由于 float 的机器表示造成的。我在 Windows 和 Linux 上都进行了相同的实验;也用 Java 编程,但我不记得在 pascal 中遇到过同样的问题。

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

最佳答案

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

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

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

关于c++ - 在 C++ 中处理 float 或 double 。表述错误。小数值丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com