我正在编写一个程序来处理大到10 ** 100
的数字,当处理较小的数字时一切看起来都很好,但是当值变大时,我会遇到这样的问题:
>>> N = 615839386751705599129552248800733595745824820450766179696019084949158872160074326065170966642688
>>> ((N + 63453534345) / sqrt(2)) == (N / sqrt(2))
>>> True
显然,上述比较是错误的,为什么会发生这种情况?在
我不认为我的问题是上述链接问题的重复,因为n, m and j
中的小数点对我来说并不重要,我正在寻找一个解决方案来避免这个精度问题。在
在除以标准浮点数时,不能保留所需的精度,因此应该用
Fraction
除以。fractions
模块中的Fraction
类允许您进行精确的有理运算。在当然,2的平方根是不合理的。但是如果错误小于
10**100
中的一部分,您将得到正确的结果。在那么,如何计算
sqrt(2)
的近似值作为Fraction
?有几种方法可以做到这一点,但一个简单的方法是计算2 * 10**200
的整数平方根,它将接近sqrt(2) * 10**100
,然后将其作为分子,并将10**100
作为分母。在下面是Python3中关于整数平方根的一个小例程。在
你应该可以从那里拿走。在
相关问题 更多 >
编程相关推荐