经过一些延迟测量测试后,我发现我需要优化在具有相当慢 FPU 的嵌入式 CPU 上完成的毕达哥拉斯三角形计算。
问题是,如果发生这些计算,它们会以数字形式出现,这会打乱时间。我不能减少计算的绝对数量。但不知何故,他们需要变得更快……至少提高 5 倍。:-/
我目前正在考虑对这些计算进行预处理,因为不同值的输入范围以某种方式限制在大约 300-500 个排列,并且两个表条目之间的插值就足够了。但我也想知道是否对问题使用某些条件也可以加快此代码的速度:
float h = 0.f, v=0.f;
/// ...
float const d = std::sqrt( (h*h) + (v*v) );
这个我还没用过:
- 结果d的准确性非常有限,因为需要 3 个小数位
- 三角形的边 (h,v) 始终处于 4:3 或 16:9 的纵横比
我不知道平方根是否可以使用一些整数定点计算,或者该函数是否可以替换为精度较低的函数或以某种方式使用纵横比。
有任何想法吗?
谢谢!