重新调整浮点方程

Jam*_*mie 3 floating-point precision linear-algebra

我想知道是否有办法提高计算斜率的准确性.(这想出了几个月前在这里).

似乎通过改变:

float get_slope(float dXa, float dXb, float dYa, float dYb) {
    return (dXa - dXb)/(dYa - dYb);
}
Run Code Online (Sandbox Code Playgroud)

float get_slope(float dXa, float dXb, float dYa, float dYb) {
    return  dXa/(dYa - dYb) - dXb/(dYa - dYb);
}
Run Code Online (Sandbox Code Playgroud)

可能是一种进步.建议?

编辑:我追求的是精确度,而不是效率.

Nos*_*dna 5

将它们转换为函数内部的两倍.


你要遇到麻烦的地方是分母接近于零,显然.你的坡度将接近无穷大.所以很大程度上取决于你想要用斜坡做什么.有时,如果您知道delta y将接近零,则可以计算斜率的倒数并使用它.您甚至可以检测哪个更小 - deltax或deltay的绝对值并返回斜率或1 /斜率.另请查看atan2().


如果您知道输入是十进制的,并且您希望输出也是十进制的,则可以通过使用十进制库进行所有计算来克服将浮点数转换为二进制和返回所固有的精度损失.我记得当我使用Atari BASIC进行十进制计算时我很高兴,因为它使用了6502的BCD模式.