在c++中处理浮点数或双精度数.表示错误.丢失十进制值
Working around float or double numbers in C++. Errors of representation. Loss of decimal values
我听说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++都没有浮点值的问题。作为程序员,您可以在任何支持浮点数的语言中正确地使用它。
整数变量不能存储分数和越界值,而浮点变量只能存储分数的特定子集。高质量的浮点实现也为计算的准确性提供了严格的保证。
浮点数不是有理数,需要无限的空间才能可靠地存储。
相关文章:
- std::is_base_of表示ctor编译错误
- 将图形表示为unordered_map<字符串、向量>时拓扑排序错误<string>
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- 使用向量将给定表达式转换为波兰表示法时出现运行时错误
- 前缀表示法 C++,分段错误(堆栈和队列)
- GCC ARM 交叉编译,像未定义的引用"__cxa_end_catch@CXXABI_1.3"这样的错误表示什么?
- 编译C 程序时具有逻辑错误,该程序应将任意大的数字表示为字符串
- C 的数字拟合的错误表示
- Gtest使用C++11 std::condition_variable表示valgrind错误
- constexpr:浮点表示的错误
- 如何检测浮点表示错误..99999.. 或 ..00000.. 并在C++中更正它们
- LogonUser 返回 true 表示密码错误
- 我需要使用枚举来表示难度级别。我不断收到有关使用 cin 的错误>>
- 逻辑错误:平均质心计算不正确,无限执行,'entries '函数 - K 表示一组点的聚类,以C++为单位
- 异常消息:插入错误值的字符串表示
- 没有“std::flush”,表示分割错误
- 每个AuthzInitializeContextFromSid的错误110表示什么? "While trying to retrieve the authorization groups, an er
- 在c++中处理浮点数或双精度数.表示错误.丢失十进制值
- 执行时,1D Peak表示错误导致代码停止工作