如何解决在python 3中添加大自然数带有指数符号和小自然数时失去精度
n = int(input())
sum1 = (n * (n + 1)) / 2
sum2 = int(sum1)
sum2 = sum2 + 100
sum1 = sum1 + 100
if sum2 == sum:
print("same")
elif sum2 > sum1:
print("less")
elif sum2 < sum1:
print("more")
print("sum1=",sum1)
print("sum2=",sum2)
输入:n = 10000000000(或大于10 ^ 9的任何值)
输出:较少
sum1 = 5.0000000005e + 19
sum2 = 50000000005000003684
sum1和sum2都应该相等,但是当指数起作用时,我不知何故失去了精度,如果我尝试打印sum1和sum2之间的差,则输出为零(0.0)。对于较小的n值,我得到准确的答案。
那么,当我添加很大的整数和更小的整数时,如何避免丢失精度并获得准确的结果?
注意:这段代码只是较大程序的一部分,因此请保持一般性回答。谢谢。
解决方法
正如alani所指出的,float
中有一个到sum1 = (n * (n + 1)) / 2
的隐式转换。例如。 isinstance(1/1,float) == True
。使用整数除法//
。 n*(n+1)
始终是偶数,因此您永远不会在失去准确性的情况下获得N.5
的结果。另外,repr
中的float
总是带有小数点(1.0
)或指数(1e+20
)或两者都有,因此,如果您看到的话,知道你有浮游物。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。