2013-10-07 10 views
10

Standard IEEE 754 definiuje pierwiastek kwadratowy z ujemnego zera jako zero ujemne. Wybór ten jest łatwy do zracjonalizowania, ale inne opcje, takie jak definiowanie sqrt(-0.0) jako NaN, również mogą być zracjonalizowane i łatwiejsze do wdrożenia w sprzęcie. Jeśli obawiano się, że programiści będą pisać if (x >= 0.0) then sqrt(x) else 0.0 i zostaną ukąszeni przez to wyrażenie, oceniając NaN, gdy x jest -0.0, wówczas sqrt(-0.0) można było zdefiniować jako +0.0 (w rzeczywistości dla tego konkretnego wyrażenia wyniki byłyby jeszcze bardziej spójne).Jaki algorytm numeryczny jest uproszczony, definiując sqrt (-0.0) jako -0.0?

Czy istnieje algorytm numeryczny, w przypadku którego określenie sqrt(-0.0) zdefiniowane jako -0.0 upraszcza logikę samego algorytmu?

+0

Artykuł [wikipedia] (http://en.wikipedia.org/wiki/Negative_zero) jest przyzwoity. Prawdopodobnie powinieneś zapytać o to pod adresem math.se –

Odpowiedz

0

Jedynym matematycznie uzasadnionym wynikiem jest 0. Istnieje uzasadnione pytanie, czy powinno to być +0, czy -0. Dla większości obliczeń nie ma żadnej różnicy, ale istnieją pewne specyficzne, złożone wyrażenia, dla których wynik ma więcej sensu zgodnie z konwencją -0. Dokładne szczegóły wykraczają poza zakres tej witryny, ale to jest jej sedno.

Mogę wyjaśnić trochę więcej, gdy nie jestem na wakacjach, jeśli ktoś inny mnie do tego nie pobije.

+3

To naprawdę nie jest odpowiedź. Jakie są wyrażenia, w których konwencja -0 ma więcej sensu? – pburka

+3

@pburka Przykłady znajdują się w artykule "Elementarne funkcje lub wiele hałasu o nic nie jest znakiem", autorytatywne odniesienie, które Stephen wskazał przed tym pytaniem, było pytanie StackOverflow: http://people.freebsd.org/~das/kahan86branch. pdf. Jak sam mówi, dokładne szczegóły wykraczają poza zakres "programowania". Programista powinien, przynajmniej w przypadku 'sqrt (-0.0)', "Zamiast myśleć o +0 i -0 jako odrębnych wartościach liczbowych, pomyśl o ich znaku bitowym jako zmiennej pomocniczej, która przekazuje jeden bit informacji (lub dezinformacja) ", i zaufaj matematykowi, że ma to sens. –

+2

@PascalCuoq: Dziwnym trafem, artykuł Kahana o znaku jest tym, który przekonał mnie, że' sqrt (-0.0) 'mający wartość' 0.0' może mieć więcej sensu, dla spójności z sposób, w jaki Kahan definiuje złożony pierwiastek kwadratowy. Jeśli czytam to dobrze, wynik wywołania CSQRT (na skończonym wejściu) zawsze ma część rzeczywistą, której bit znaku jest rozbrojony. (I myślę, że to zachowanie, które zaleca także C-Załącznik G). IOW, CSQRT zawsze mapuje ćwiartki 1 i 2 na ćwiartkę 1, a ćwiartki 3 i 4 na ćwiartkę 4. (używając znaku zerowego do określenia kwadrantowego członkostwa w oczywisty sposób.) –