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

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 07:19
    关注

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

    评论
    编辑
    预览

    报告相同问题?

    悬赏问题

    • ¥15 全志t113i启动qt应用程序提示internal error
    • ¥15 ensp可以看看嘛.
    • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
    • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
    • ¥15 minist数字识别
    • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
    • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
    • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
    • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
    • ¥15 潜在扩散模型的Unet特征提取
    手机看
    程序员都在用的中文IT技术交流社区

    程序员都在用的中文IT技术交流社区

    专业的中文 IT 技术社区,与千万技术人共成长

    专业的中文 IT 技术社区,与千万技术人共成长

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

    客服 返回
    顶部