2013-04-29 14 views
5

Betrachten Sie den folgenden CodeGibt es ein neutrales Element in IEEE754 im Hinblick auf zusätzlich

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); 
} 

Meine Frage Snippet: Gibt es einen Wert für id, so dass die Behauptung für alle i hält? Mit anderen Worten für die Mathematiker unter uns: Gibt es das Doppelte, das das neutrale Element für die Addition ist?

+0

Wie 0 oder -0 oder NAN oder Infinity oder -Infinity? –

+0

@MichaelDorgan + inf + (-inf) macht NaN, also kann keiner neutral sein. –

+0

Ja, deine Antwort ist richtig. Ich habe nur versucht, die Frage zu bestätigen. Ihre -0 Antwort ist nett. –

Antwort

7

-0. ist paradoxerweise der Gleitkommawert, der als Neutral für die Addition dient.

+0. fast ist, aber -0. + (+0.) macht +0..

aus, dass Apart, macht +inf + (-0.)+inf, -inf + (-0.)-inf macht, und NaN + (-0.) macht NaN.

+6

Annahme der Standardrundung. Wenn Sie den Rundungsmodus auf rund minus minus unendlich einstellen, ist '+ 0.' neutral. –

+0

Was ist mit Normalisierung? Erwarten Sie etwas Seltsames, wenn Sie 'r = d + (- 0.)' machen? – niklasfi

+0

@niklasfi: Wenn Sie Null hinzufügen, tritt keine Normalisierung auf. –