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

Python中math.floor()与//运算符的实现差异及结果不同问题

math.floor() 与 // 运算符的结果差异原因

先看测试代码:

import math

def try_floor():
 return math.floor(47642706656219667964201 / 2)


def try_double_backslash():
 return 47642706656219667964201 // 2

两个函数返回结果不同,核心原因是两者依赖的运算机制和精度完全不同:

  • // 运算符:精确整数除法
    Python的int类型是任意精度的,不管整数多大都能精确存储。a // b 直接对两个整数执行向负无穷方向取整的整数除法,全程不会丢失任何精度。测试用的大整数47642706656219667964201能被Python精确存储,// 2 自然能算出精确的商23821353328109833982100。

  • math.floor():基于浮点数的近似运算
    代码里用了/除法,这会先把整数转换为双精度浮点数(float)。但双精度浮点数的有效位数只有53位,测试用的整数远大于2^53(约9×10¹⁵),转成float时,低位的精确信息会被丢弃,变成一个近似值。原数转成float后已经不是原来的精确值了,除以2后的结果也是近似值,math.floor() 只是对这个失真的浮点数取整,最终得到23821353328109835780096这个和精确结果不同的值。

简单说://走的是精确整数运算逻辑,math.floor(/)依赖的是浮点数近似运算,大数场景下浮点数精度不够,结果自然不一样。

内容的提问来源于stack exchange,提问作者Stephane. T NOUAFFO

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:37:14