Ist es immer sicher, eine Fließkommazahl zu negieren?

8

Überlegen Sie:

%Vor%

wobei foo() alles zurückgeben kann, was f zugewiesen wurde.

ist double g = -f; sicher in C und C ++? Für IEEE 754-Typen ist es offensichtlich, aber C und C ++ beschränken die Implementierung von Fließkomma nicht auf Java (im Gegensatz zu Java).

Wenn es sicher ist, dann würde -g immer true mit foo() vergleichen?

(Das obige gilt nicht für int im 2er-Komplement).

    
P45 Imminent 12.06.2015, 09:58
quelle

1 Antwort

5

Gleitende Typen sind definiert durch §5.2.4.2.2 der C-Norm (mindestens Entwurf N1570):

  

Die Eigenschaften von Gleitkommatypen werden in Form eines Modells definiert, das eine Darstellung von Gleitkommazahlen und Werten beschreibt, die Informationen über die Fließkomma-Arithmetik einer Implementierung liefern.21) Die folgenden Parameter werden verwendet, um das Modell für jedes zu definieren Fließkommatyp:

     
  • s sign (± 1)
  •   
  • b base oder Radix der Exponentendarstellung (eine ganze Zahl & gt; 1)
  •   
  • e exponent (eine ganze Zahl zwischen einer minimalen emin und einer maximalen emax)
  •   
  • p precision (die Anzahl der base-b Ziffern im significand)
  •   
  • fk nichtnegative ganze Zahlen kleiner als b (die signifikanten Ziffern)
  •   

Eine Fließkommazahl (x) wird durch das folgende Modell definiert:

     

Ja, dieser Ausdruck ist etwas sicher , außer in dem Fall, dass foo eine der "anderen Arten von Gleitkommazahlen" zurückgegeben hat, die nicht von Standard:

  

Zusätzlich zu den normalisierten Fließkommazahlen (f1 & gt; 0, falls x ∈ 0) können Gleitkommatypen möglicherweise andere Arten von Fließkommazahlen enthalten, z. B. unterdurchschnittliche Fließkommazahlen (x ∈ 0) , e = emin, f1 = 0) und nicht normalisierte Gleitkommazahlen (x ≠ 0, e & gt; emin, f1 = 0) und Werte, die keine Fließkommazahlen sind, wie beispielsweise Unendlichkeiten und NaNs.

>

und:

  

Eine Implementierung kann Null und Werten, die keine Fließkommazahlen sind (wie Unendlichkeiten und NaNs), ein Vorzeichen geben oder sie vorzeichenlos lassen.

Es gibt wahrscheinlich andere Vorbehalte, aber der Standard geht ein gutes Stück über die Eigenschaften dieser Typen. Sie können alles über diesen öffentlich zugänglichen Entwurf lesen.

    
Shoe 12.06.2015, 10:18
quelle

Tags und Links