2013-04-29 9 views
5

Rozważmy następujący kod snippetCzy istnieje neutralny element IEEE 754 w odniesieniu do Dodatkowo

double id = ?; 
double res; 
long unsigned *res_u = (long unsigned*)&res; 

long unsigned i; 
for (i = 0; i < (long unsigned)-1; i++){ 
    double *d1 = (double*)&i; 
    res = id + *d1; 
    assert(*res_u == i); 
} 

Moje pytanie: Czy istnieje wartość dla id tak, że twierdzenie zachodzi dla wszystkich i? Innymi słowy dla matematyków pośród nas: czy istnieje podwójne, które jest neutralnym elementem dodawania?

+0

Podobnie jak 0 lub -0 lub NAN lub Infinity lub -Infinity? –

+0

@MichaelDorgan + inf + (-inf) tworzy NaN, więc żaden z nich nie może być neutralny. –

+0

Tak, twoja odpowiedź jest poprawna. Próbowałem tylko potwierdzić pytanie. Twoja odpowiedź -0 jest niezła. –

Odpowiedz

7

-0. jest paradoksalnie wartością zmiennoprzecinkową, która służy jako neutralny do dodania.

+0. prawie jest, ale -0. + (+0.) tworzy +0..

Oprócz tego +inf + (-0.) sprawia +inf, -inf + (-0.) sprawia -inf i NaN + (-0.) sprawia NaN.

+6

Zakładając domyślne zaokrąglenie. Jeśli ustawisz tryb zaokrąglania na round-to-minus-infinity, '+ 0.' jest neutralny. –

+0

Co z normalizacją? Czy spodziewasz się czegoś dziwnego, kiedy wykonasz 'r = d + (- 0.)'? – niklasfi

+0

@niklasfi: normalizacja nie występuje po dodaniu zera. –

Powiązane problemy