A_FORMAT 2020-01-04 12:20 采纳率: 33.3%
浏览 889

python的除法计算,为什么和计算器计算的不一样?

需要把一段java代码重写为python的,运行结果总是不对,调试后发现是python在计算过程中和java有些不一样。

比如计算下面这个数字:

1811552740395741107/62

java和win10系统计算器计算的结果都是 【29218592587028082】

但是,python计算的结果是-------------【29218592587028084】

为什么会相差2?

图片说明

很难受,是什么原因导致的这种情况,python在这其中是有一些坑是我不知道的吗?

#更新

在stackOverflow上找到了解决办法,用运算符'//'代替'/'。
1811552740395741107 // 62
'//'表示整数除法,结果是整数?程序结果是正确了,但是不知道为什么,之前的结果相差2,也不是进位退位导致的吧。
不知道python的'/'底层是怎么实现的,大数运算过程中二进制位产生了累积误差?

还发现一个问题,绝对值函数math.fabs(),下列代码:
t = -1811552740395741107
if -t == math.fabs(t):
    print(-t)
    print('%f' % math.fabs(t))

两条print是可以执行的,但是输出结果是:
 1811552740395741107
 1811552740395741184.000000

 也就是说在内存中的二进制数是相等的,但是打印出两个数却不一样?
 如果拿fabs()得到的结果去计算,程序和预期的结果又不一样,很烦,今天踩了很多坑!

有谁知道其中的原因么,为什么Python的行为和其他语言不一样?这应该不是BUG吧

  • 写回答

1条回答 默认 最新

  • TSK、ML 2020-01-04 15:19
    关注

    这个情况没考虑过,但是Python的计算我就说加法吧,就是相当于对其然后加,等于说在Python的加法中不是用的数字二十字符串对其然后再进行的计算,除法这个什么的还真不清楚

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?