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

如何在float64环境下精准计算中等负x值对应的f(x)函数?

用float64精准计算中等负x值下的f(x)

当x为中等负数(-1e6至-1e2)时,原函数的计算误差来自大数值抵消:原表达式中0.5 + arctan(x/√3)/π部分会趋近于0,但arctan(x/√3)的浮点近似误差会在抵消后被放大,最终导致结果偏离真实值。

解决方案:数学等价变形

通过三角恒等式改写原函数,避免大数值抵消。令t = -x(此时t > 0),利用arctan(z) = π/2 - arctan(1/z)(z > 0),将原函数推导为:
$$
f(x) = \frac{\arctan\left(\frac{\sqrt{3}}{t}\right)}{\pi} - \frac{\sqrt{3} \cdot t}{\pi \cdot (t^2 + 3)}
$$
这个形式中,所有项都是小正数的运算,不存在大数值抵消,能最大化float64的计算精度。

实现代码

import math

def g(x):
    if x < 0:
        t = -x
        sqrt3 = math.sqrt(3)
        at_term = math.atan(sqrt3 / t) / math.pi
        frac_term = sqrt3 * t / (math.pi * (t*t + 3))
        return at_term - frac_term
    # 非负x直接使用原表达式
    sqrt3 = math.sqrt(3)
    return 0.5 + math.atan(x / sqrt3)/math.pi + sqrt3 * x/(math.pi*(x*x +3))

验证结果

对于x=-10_000,新函数的计算结果为1.1026577511479050e-12,与期望的真实值完全一致,而原函数结果存在明显误差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:14:57