减去双倍会得到错误的结果
Subtracting double gives wrong result
我正在尝试从双精度中获取小数部分,这是我获取小数部分的代码
double decimalvalue = 23423.1234-23423.0;
0.12340000000040163
但是在减法之后,我预计十进制值为 0.1234,但我得到 0.12340000000040163。请帮助我了解此行为以及是否有任何解决方法。
我建议你看看
每个计算机科学家都应该知道的关于浮点运算的知识
维基百科:IEEE 754
可以在浮点数中指定有限数量的值,但在表示的范围内可以指定无限数量的浮点数。
因此,某些浮点数不能在任何浮点/双精度样式数据类型中准确表示。
处理特定问题的典型方法是避免直接相等比较,而是进行 epsilon 测试:查看预期值和计算值是否在彼此之间的某个小数字(与被减去的值相比)内,称为 epsilon。
间接相关的是机器Epsilon的概念,值得一看才能全面了解
这是一个舍入错误。在十进制中,你不能在给定的位数(比如 15)中完美地表示 1/3。在基数 2 中,还有很多东西你不能代表,0.1234 恰好是其中之一。精度取决于小数位数,但双精度约为 15 位十进制数字。我建议查看 http://en.wikipedia.org/wiki/IEEE_floating_point 以获取有关浮点数的更多详细信息。
如果您正在尝试制作一个以 10 为基数的系统(例如人类使用的计算器),并且您需要确切的结果,您应该使用 BCD。
相关文章:
- 如何修复循环中的错误产生的错误结果?
- 添加可变参数函数的错误结果
- 使用特征 3 线性系统求解器的错误结果
- 按位包含 OR 的错误结果
- 如果我将索引变量更改为零,并且合并函数中的k = 0,则获得合并排序的错误结果
- STD :: FPCLASSIFY的错误结果使用Valgrind进行长时间的双重双重结果
- 视觉工作室的错误结果
- 将C#struct传递给C 不受管理的DLL返回错误结果
- 最长的常见子字错误结果
- 华氏度到摄氏度的错误结果
- UE4中简单坐标变换的错误结果
- 记忆错误结果的说明[编译器行为]
- 如何解决错误PRJ0002:错误结果 -1073741515从"cl.exe"返回?
- 错误 PRJ0002:错误结果 -1073741515 从"C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\cl.
- glGetUniformLocation OpenGL ES 2.0(在ipad 3 iOS 7.0.3上返回错误结果)
- 在模板函数中调用std::for_each时出现错误结果
- 使用copy和back_inserter将矢量附加到其自身时出现错误结果
- CUDA 线程在全局内存中的私有位置写入时出现错误结果
- 来自 c++ 代码的错误结果
- 使用浮点值和铸造的算术运算的错误结果 - 差异很大,我想这不是准确值的情况(429497)?