You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python除法后防浮点数转换及精度问题求助

解决Super Coordinate Sums中的整数运算问题

你遇到的两个版本函数都有各自的问题:

  1. 第一个函数的问题:
def super_sum(d, n): return int((n - 1) * d / 2) * n ** d

当d为奇数且n为偶数时,(n-1)是奇数,奇数乘奇数d的结果还是奇数,除以2会得到带.5的小数。int()会直接截断小数部分,相当于把结果少算了0.5 * n**d,导致错误。

  1. 第二个函数的问题:
def super_sum(d, n): return int((n - 1) * d / 2 * n ** d)

把整个表达式转成浮点数计算后再转整数,但Python的浮点数(默认是64位)只有约15-17位有效数字。当d和n较大时,n**d会变成极大的整数,浮点数无法精确存储这么大的数,计算时会丢失精度,最终结果出错。

正确的解决方案:全程使用整数运算

因为(n-1)*d*n**d这个乘积必然是偶数:

  • 如果n是偶数,n**d包含因子2,整个乘积是偶数
  • 如果n是奇数,n-1是偶数,整个乘积也是偶数

所以可以先计算所有乘法,再用整数整除2,全程避免浮点数和截断问题:

def super_sum(d, n):
    return (n - 1) * d * (n ** d) // 2

这个版本:

  • 完全用整数运算,没有浮点数精度丢失的问题
  • 整除操作是精确的,因为乘积必然是偶数,不会出现小数部分被截断的情况

测试你提到的d=129、n=48的场景,这个函数会返回精确的正确结果,不会出现精度偏差。

内容的提问来源于stack exchange,提问作者bable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:25:59