python - python中的默认舍入模式,以及如何将其指定为另一个舍入模式?

标签 python floating-point rounding

Python 中的默认舍入模式(舍入到最接近的值等)是什么?我们如何指定它?

最佳答案

对于基于 IEEE754 的平台(就像大多数现代平台一样,包括 x86、ARM、MIPS...),它的默认模式“舍入到最近,结到偶数”是 Python 标准库中唯一可用的模式。这是由标准化默认值和缺少库方法来更改它的“提供”。还有更多不允许更改舍入模式的语言 - 例如Java - 所以这不是一个孤立的 Python 突发奇想。

实际上,改变这一点的理由太少了。 IEEE754 的直接舍入模式在使用上非常特殊。 (我不会为坚持默认舍入的方法道歉,只是简单地评论一下。)例如,将 1e308 乘以 1e308 并舍入到零或负无穷大的结果大约为 1.8e308,因此,结果太与确切答案和 POLA 相去甚远- 基于一(无穷大)。如果您确实需要一些特定的计算模式,请考虑使用特定的库,例如 MPFR 或 gmpy2。

如果您坚持在没有专门用于浮点计算的外部模块的情况下更改它,请尝试通过 ctypes 模块或模拟使用 C 库 fesetround,例如here .同样,您可以选择使用此类黑客手段并对所有后果负责。我建议将所有带有特殊舍入的部分包装成 C 级代码,这样可以在函数退出时恢复默认模式。

关于python - python中的默认舍入模式,以及如何将其指定为另一个舍入模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34030509/

相关文章:

floating-point - 为什么 0.0 == 0.0 在 REPL 中为假,但在 native 执行时为真?

c++ - 为什么不常用算术表示?

javascript - 如何 JavaScript 向下舍入数字 - 继续

c# - 将 float 舍入为 -1、0 或 1

python - 乌鸦不向 Sentry 报告异常

python - 从 dict 返回信息

python - 匹配两个网格进行数据分析,对于我的问题有好的算法吗?

python - 插入轴锚定到数据坐标中的特定点?

java - 当 float 完全是整数时,为什么 float 尾部有 .0?

c# - 如何将 double 格式设置为四舍五入到最接近的美元的货币?