0
使用DirectX矢量幅度數學函數而不是以下代碼有什麼不同?內置幅度函數與此代碼之間的性能差異
float hyp = sqrt(pow(globalVector.x, 2) + pow(globalVector.y, 2))
使用DirectX矢量幅度數學函數而不是以下代碼有什麼不同?內置幅度函數與此代碼之間的性能差異
float hyp = sqrt(pow(globalVector.x, 2) + pow(globalVector.y, 2))
不夠你照顧。
我建議您發佈的功能有一些改進。
無需調用電源功能; x*x
和y*y
將一樣好,便宜。
我會防止舍入通過縮放,這樣的僞代碼:
if (abs(x) > abs(y)) {
r = abs(y/x);
hyp = x*sqrt(1 + r*r);
} else {
r = abs(x/y);
hyp = y*sqrt(1 + r*r);
}
你是什麼意思 - 防止四捨五入通過縮放? – SirYakalot 2012-02-24 16:08:09
你應該看看它。如果x或y(或兩者)都非常大,則將大數平方和將它們添加到較小數可能會導致精度損失。一個雙精度只有大約18位數字。所以如果你以這樣一種方式來擴大問題的範圍,那麼你永遠不會編一個很大的數字。 – duffymo 2012-03-01 18:51:07