我的C代码中有以下等式
k * dl * (1.0 + pHold / centre
+ (pHold * pHold) / (2.0 * centre * centre)
- square / (2.0 * centre))
我知道浮点除法比乘法要贵得多,我已经花了一段时间在这上面了。有没有什么办法可以重新安排这个来划分?
谢谢
最佳答案
如果你看分数的分母,你会发现做一个共同的分母只允许你做一次除法(牺牲更多的乘法):
k * dl * (1.0
+ pHold / (centre)
- square / (2.0 * centre)
+ (pHold * pHold) / (2.0 * centre * centre)
)
如果确定浮点乘法优于浮点除法,则:
k * dl * (1.0
+ (pHold * 2.0 * centre) / (2.0 * centre * centre)
- (square * centre) / (2.0 * centre * centre)
+ (pHold * pHold) / (2.0 * centre * centre)
)
变成:
k * dl * (1.0
+ ( (pHold * 2.0 * centre)
- (square * centre)
+ (pHold * pHold) ) / (2.0 * centre * centre)
)