2012-02-24 47 views

回答

2

不夠你照顧。

我建議您發佈的功能有一些改進。

無需調用電源功能; x*xy*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); 
} 
+0

你是什麼意思 - 防止四捨五入通過縮放? – SirYakalot 2012-02-24 16:08:09

+0

你應該看看它。如果x或y(或兩者)都非常大,則將大數平方和將它們添加到較小數可能會導致精度損失。一個雙精度只有大約18位數字。所以如果你以這樣一種方式來擴大問題的範圍,那麼你永遠不會編一個很大的數字。 – duffymo 2012-03-01 18:51:07

相關問題