注意:我已经更新了这个问题,不再涉及 IEEE 浮点表示或 IEEE 输出格式。
在
python3
中,语句x = 33.0 / 11.0
在变量3.0
中得到x
的值。
大多数情况下,这样的结果确实是我们想要的
但是,我有一个特殊情况,我不想要那个四舍五入的值。相反,如果在任何除法步骤中不执行任何舍入,我想要的是实际精确计算的任何内容。在这种情况下,期望的结果将类似于
2.99999997...
,或者可能是3.00000003...
,或者类似的东西。
我知道
python3
函数可以编写并且(已经编写!)明确地对除数和被除数的表示执行浮点除法算法,我已经在 Stackoverflow 中看到了其中的一些函数,并且网上其他地方。
但是,我想知道
python3
中是否有一些我可以直接调用的函数将执行这种浮点除法并产生我上面描述的那种结果,而无需使用任何特殊的用户编写的代码.
我在
python3
math
包里没有看到这样的东西,但也许我忽略了什么。
明确地说,我 do not (!!!) 想要示例如何在
python3
中编写此除法算法,因为正如我所提到的,我知道这样的示例已经存在,并且他们不是我要找的。我想知道的是,在某种 python3
可调用包中是否有一个简单的函数,它将对浮点数执行这种除法,而不会在任何中间计算步骤中进行任何舍入。
提前感谢您的任何建议。
PS:所提供的相关问题均未回答我自己的问题。它们涉及除法算法、浮点表示的某些方面,在某些情况下还涉及如何编写此类算法。但正如我上面提到的,我正在寻找一个 already existing package in
python3
(如果存在这样的包)它提供了一个或多个编写来执行此操作的功能除法没有任何四舍五入。
这有帮助吗?使用量化方法?
import decimal
x = decimal.Decimal('10')
y = decimal.Decimal('3')
# Perform division without rounding
result = x / y
result = result.quantize(decimal.Decimal('1'), rounding=decimal.ROUND_DOWN)
print(result) # Output: 3.333333333333333333333333333
在 IEEE 中,每个整数都被精确表示。它的位模式被移位,使隐含的 1 代表数字的较高位,指数补偿移位。
那么你有:
>>> "{:.200f}".format(7)
'7.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
另一方面,像 0.3 这样的小数不能精确表示。那么你有
>>> "{:.200f}".format(0.3)
'0.29999999999999998889776975374843459576368331909179687500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
即使
str(0.3)
是'0.3'
.