【发布时间】:2017-06-12 12:21:13
【问题描述】:
我说的是转换已经存储整数值的浮点数(如 10.0)
我需要这样做,因为我想创建一个反转给定整数的简单函数,它使用如下代码行:ans += x % (int)pow(10, i);(% 运算符需要两个参数都是整数,并且 pow 返回一个双)
C++ 不太乐意正确地进行这种转换。对于pow(10, 4),我得到的值是9999,这很烦人。为什么会发生此错误很明显,10^4 必须已存储为 9999.999999... 或类似的东西。我可以通过使用lround() 函数来修复此错误,但这不是最佳解决方案,因为如果我忽略了类似的错误怎么办?
有没有办法用 C++ 做数学而不用担心这些琐事?如果不是,我应该选择什么语言来进行这样的计算?我在 python 中简要使用了 bigInt 库。有关使用哪种语言和库来解决此问题的任何建议都会非常有帮助。
【问题讨论】:
-
lround似乎正是您所需要的——您为什么说它“不是最佳的”? -
在浮点精度方面,大多数其他语言都会遇到类似的问题。
-
@AayushMahajan 二进制浮点数在绝大多数情况下无法准确表示十进制浮点数。所以你有 3 个选择:(1) 放弃浮点并使用多精度整数运算,(2) 了解二进制浮点是什么并确定它是否满足你的需要或 (3) 使用第 3 方多精度(big-编号)图书馆,
-
“如果我忽略了类似的错误怎么办?” 你怎么能忽略它?你必须在
int中插入一个明确的演员表,所以只需训练自己进行四舍五入而不是演员表。不会再慢了。看起来很简单的演员表不是免费的。