gpt4 book ai didi

python - 在 Python 3.5 中,当除以一个偶数时,为什么 divide 和 floor divide 给出不同的答案

转载 作者:太空狗 更新时间:2023-10-30 02:39:46 27 4
gpt4 key购买 nike

I am trying to divide a very large even number 13144131834269512219260941993714669605006625743172006030529504645527800951523697620149903055663251854220067020503783524785523675819158836547734770656069476我同时使用除法和地板除法,但它为我提供了两个不同的答案,我认为应该是相同的。于是我得到了

int(x/2) = 6572065917134756165333387211683112531415896759844144557192219233347999705289073358407747856661759761476763448808302430806962124152349175018830474952835072
int(x//2) = 6572065917134756109630470996857334802503312871586003015264752322763900475761848810074951527831625927110033510251891762392761837909579418273867385328034738

有谁能告诉我差异的结果是什么?谢谢

最佳答案

/ 真正的除法总是产生一个 float 结果,你不能用 float 准确地模拟你的数字:

>>> huge = 13144131834269512219260941993714669605006625743172006030529504645527800951523697620149903055663251854220067020503783524785523675819158836547734770656069476
>>> huge / 2
6.572065917134756e+153
>>> type(huge / 2)
<class 'float'>

那是 10^153 的 6 倍,但是 float 只能在尾数中携带 53 位精度的二进制数:

>>> import sys
>>> sys.float_info.mant_dig
53

float 使用二进制分数来模拟小数部分,这意味着对于大多数可能的十进制值,这只是一个近似值。

将该值转换为 int() 不会恢复丢失的精度。

// 另一方面,floor 除法为整数输入生成一个整数,并且整数具有任意精度,因此不会丢失任何内容:

>>> type(huge // 2)
<class 'int'>

关于python - 在 Python 3.5 中,当除以一个偶数时,为什么 divide 和 floor divide 给出不同的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43483934/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com