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 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝