gpt4 book ai didi

math - 浮点;除法与乘法

转载 作者:行者123 更新时间:2023-12-04 19:04:39 30 4
gpt4 key购买 nike

您有 2 个功能;

f(x)= x(((x+1)^(1/2))-(x^(1/2)))    
g(x)= x/(((x+1)^(1/2))+(x^(1/2)))

哪个更准确?

旁注:如果你能解释为什么,那真的会对我有帮助,我觉得它是 f(x),因为没有分母,但我不是 100% 确定。

最佳答案

浮点运算与真正的数学完全不同。特别是,浮点算术不是结合的或分配的。因此,当使用有限精度浮点算术计算时,数学上等效的表达式不一定等效。即使单个运算(如加法、减法、乘法、除法和平方根)产生正确的舍入结果,情况也是如此,正如 IEEE-754 floating-point standard 所要求的那样。 .

在这种情况下 g()将比 f() 准确得多平均而言,也适用于 x = 500 的特定情况.原因是f()遭受减法抵消。这发生在两个大小几乎相同的浮点数的有效相减期间。在减法过程中前导数字取消,只留下几个剩余的尾随数字进入后续计算。此外,在被减去的原始操作数的尾随数字中累积的任何舍入误差可能会被后续计算放大。可以在 this Wikipedia article 中找到带有示例的扩展说明.

在这种情况下,sqrt(x+1)sqrt(x)几乎相同的幅度,特别是与x的幅度相同增加。使用 x = 500 的例子并采用 IEEE-754 单精度算法,我们发现:

x = 500   f(x) = 0x1.659ae0p+3 (11.175156)   reference = 0x1.659798p+3 (11.174755)
x = 500 g(x) = 0x1.659798p+3 (11.174755) reference = 0x1.659798p+3 (11.174755)
f(500) 中的错误是 420 ulps , 而 g(500)提供正确舍入的单精度结果。

关于math - 浮点;除法与乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28221739/

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