python%运算符是否已损坏

python%运算符是否已损坏,python,Python,我写了一些脚本来帮助我找出某个东西是否可以被另一个东西整除,但如果数字较大,它就会失败: print(x, d) 90744169766518547761620274468374441720233236940 10 print(x/d) 9.074416976651854e+45 print(x / (x/d)) 10.0 print(x % (x/d)) 2.535301200456459e+30 既然10.0显然缺少小数部分,我不明白为什么%会给我这个垃圾输出?这能满足你的期望吗 >

我写了一些脚本来帮助我找出某个东西是否可以被另一个东西整除,但如果数字较大,它就会失败:

print(x, d)
90744169766518547761620274468374441720233236940 10
print(x/d)
9.074416976651854e+45
print(x / (x/d))
10.0
print(x % (x/d))
2.535301200456459e+30

既然
10.0
显然缺少小数部分,我不明白为什么
%
会给我这个垃圾输出?

这能满足你的期望吗

>>> print(x//d)
9074416976651854776162027446837444172023323694
>>> print(x // (x//d))
10
>>> print(x % (x//d))
0

不同之处在于,Python 3中的
/
始终生成浮点结果,即使操作数是整数。在这一点上,它不同于C。如果你想要整数除法,你需要使用
/

你可能不需要;我不知道python3改变了除法运算符的工作方式这只是浮点运算精度有限的另一个例子。引用的副本不能回答这个问题。全文分为两个部分:1。Python 3
/
将输入舍入到最近的浮点数,然后将商舍入到最近的浮点数;如果需要整数除法,则需要使用
/
。2.余数实际上是精确计算的:fl(但余数函数(即使在浮点运算中,它是精确计算的)可以将输入中非常小的误差放大为输出中非常大的误差,就像减去附近的近似值会将输入中非常小的误差放大为输出中非常大的误差一样(灾难性消除),对数函数可以将输入中接近1的非常小的错误放大为输出中任意大的错误(log1p的动机)。发生的这部分事情都与浮点无关,这是%的固有性质,−, 日志。你的回答是正确的,但是有人将这个问题与一些看似无关的主题联系起来。因为我得到了与浮点相关的精度风险,但这并没有让我更接近于理解手头的问题。