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吧

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