2013-10-07 40 views
10

IEEE 754標準定義負零的平方根爲負零。這種選擇很容易合理化,但其他選擇(例如將sqrt(-0.0)定義爲NaN)也可以合理化,並且更易於在硬件中實現。如果擔心程序員會寫if (x >= 0.0) then sqrt(x) else 0.0,並被NaN這個表達式咬到x-0.0,那麼sqrt(-0.0)可能被定義爲+0.0(實際上,對於這個特定的表達式,結果會更加一致)。通過將sqrt(-0.0)定義爲-0.0來簡化數值算法?

是否有一個數值算法,特別是sqrt(-0.0)定義爲-0.0簡化了算法本身的邏輯?

+0

[維基百科文章](http://en.wikipedia.org/wiki/Negative_zero)體面。你可能應該在數學中問這個問題。 –

回答

0

唯一的數學上合理的結果是0.有一個合理的問題,應該是+0還是-0。對於大多數計算而言,它沒有任何區別,但是有一些特定的複雜表達式,在-0約定下結果更有意義。確切的細節超出了本網站的範圍,但這是它的要義。

我可能會解釋一些更多,當我不休假,如果別人沒有打我。

+3

這實在是一個無法回答的問題。什麼是-0約定更有意義的表達式? – pburka

+3

@pburka例子在文章「基本功能或很多關於Nothing's Sign Bit」中,斯蒂芬在這個問題之前指出的權威性參考是一個StackOverflow問題:http://people.freebsd.org/~das/kahan86branch。 pdf。正如他所說,確切的細節超出了「編程」的範圍。至少在'sqrt(-0.0)'的情況下,程序員應該「不要將+0和-0想象爲不同的數值,而是將它們的符號位看作傳達一位信息的輔助變量(或錯誤信息)「,並且相信數學家是有道理的 –

+2

@PascalCuoq:奇怪的是,Kahan的符號位文章讓我確信'sqrt(-0.0)'爲'0.0'會更有意義,因爲與卡漢定義複雜平方根的方式。如果我正確地閱讀它,則CSQRT調用(在有限輸入上)的結果始終有一個實際部分,其符號位未設置。 (我相信這也是C99附錄G推薦的行爲。)IOW,CSQRT總是將象限1和2映射到象限1,而象限3和4映射到象限4上。(使用零的符號來確定象限中的象限成員明顯的方式。) –