gpt4 book ai didi

c - 保持浮点插值的最大可能精度

转载 作者:太空狗 更新时间:2023-10-29 15:26:22 25 4
gpt4 key购买 nike

我们知道点 X1 和 X2 有各自的点 Y1 和 Y2,所以我们可以计算任意 X 的 Y:

 X - X1    Y - Y1
------- = -------
X2 - X1 Y2 - Y1

我们可以从中得到简单的公式(A):

Y = (X - X1) * (Y2 - Y1) / (X2 - X1) + Y1;

这在数学上应该是等价的 (B):

Y = (X - X1) / (X2 - X1) * (Y2 - Y1) + Y1;

对于整数数学公式 A,只要乘法 (X - X1) * (Y2 - Y1) 就表现得更好结果保持在类型范围内。公式 B 不起作用,因为如果 X1 <= X <= X2 , 那么除法总是等于 0 .

对于 float ,两者都应该有效,但我认为 B 会提供更好的精度,因为乘法结果将保持较小。

  1. 我关于浮点精度的假设是否正确?

  2. 是否有一些我没有考虑到的浮点怪癖?

假定 IEEE 754 浮点表示法。

注 1:我对 float 感兴趣,整数数学非常简单。

注2:FP公式上的变量可以有非整数值,但NaN和Infs不在本题范围内。

最佳答案

解决下面的Y

 X - X1    Y - Y1
------- = -------
X2 - X1 Y2 - Y1

(A) 和 (B) 的行为相似:

(A)    Y = (X - offsetX) * deltaY / deltaX + offsetY;
(B) Y = (X - offsetX) / deltaX * deltaY + offsetY;

如果点原本是整数,“B ...乘法结果会保持较小。”可能成立,但在其他方面 |deltaX| |deltaY| 可能都小于 1,然后这个假设可能会失败。

要提高准确性,请考虑减去 2 个数字(或添加 2 个符号不同的相似数字)的效果。通过调换 point1 和 point2 的角色,代码可以选择 X1,Y1X2,Y2 作为偏移量。 选择最接近 X、Y 的偏移量将提高精度

对于FP数学,*/强调FP数所允许的指数范围:乘积的精度可以预期在数学上的一点点以内正确答案,但范围可能会溢出。

+- 强调精度:范围很少成为问题,但用于构成总和的有效数字可能会有很大的抵消。


如果所有坐标值最初都是整数,建议使用 2 倍宽的整数数学运算并得出最佳答案。

如果最终结果是整数化的,确保代码使用iy = (int) round(Y);

关于c - 保持浮点插值的最大可能精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27899609/

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