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

为何Python中math.cos(math.pi/2)未返回0值?

为什么math.cos(math.pi)返回精确值,而math.cos(math.pi/2)不?

核心原因:浮点数近似与数学库的特殊优化

  • math.pi是π的双精度近似值:Python的math.pi并非数学上精确的π,而是双精度浮点数能表示的最接近π的数值。
  • math.cos(math.pi)的特殊处理:Python依赖的底层数学库(如libm)会对高频特殊值做硬编码优化。当输入恰好等于预定义的math.pi常量时,函数会直接返回精确的-1.0,跳过浮点计算的误差环节。
  • math.pi/2的计算误差:math.pi/2是通过浮点除法得到的π/2近似值,这个值和真实的π/2存在极小偏差(约1e-16量级)。由于cos函数在π/2附近的导数为-1(函数值随输入的变化率极高),极小的输入偏差会被放大为可观测的输出偏差:cos(π/2 - ε) ≈ sin(ε) ≈ ε,这就是你看到的6.123e-17的来源。
  • 为何π/2没有同样优化? 并非所有特殊值都会被硬编码。π是三角函数中最核心的特殊值之一,优化优先级更高;另外,math.pi/2的计算结果虽为最接近π/2的浮点数,但cos函数对该值未触发特殊优化,走了常规浮点运算流程,因此暴露了误差。

补充验证

你可以用精度判断确认结果在合理范围内:

import math
# 输出True,说明结果在1e-15的精度范围内等价于0
print(math.isclose(math.cos(math.pi/2), 0, abs_tol=1e-15))

内容的提问来源于stack exchange,提问作者Michael M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:42:48