C # Doppelpräzisionsproblem

7

Stellen Sie sich vor, dass a - b & lt; c (a, b, c sind C # -Doppelwerte). Ist garantiert, dass a & lt; b + c ?

Danke!

BEARBEITEN
Nehmen wir an, dass der arithmetische Überlauf im Gegensatz zum folgenden Beispiel nicht auftritt:

%Vor%

Stellen Sie sich vor, dass Math.Abs ​​(a) & lt; 1.0 & amp; & amp; Math.Abs ​​(b) & lt; 1.0 & amp; & amp; Math.Abs ​​(c) & lt; 1.0

    
levanovd 03.09.2010, 09:16
quelle

3 Antworten

14

Nein. Angenommen a = c, eine sehr große Zahl, und b ist eine sehr kleine Zahl. Es ist möglich, dass a - b eine Repräsentation hat, die kleiner als a ist, aber a + b ist so nah an a (und größer), dass es am Ende noch am genauesten als a dargestellt werden kann.

Hier ist ein Beispiel:

%Vor%

BEARBEITEN:

Hier ist ein weiteres Beispiel, das Ihrer bearbeiteten Frage entspricht:

%Vor%

Mit anderen Worten, wenn wir eine sehr kleine Zahl von 1 subtrahieren, erhalten wir ein Ergebnis kleiner als 1. Wenn wir die gleiche Zahl zu 1 hinzufügen, erhalten wir aufgrund der Einschränkungen der doppelten Genauigkeit nur 1 zurück.

    
Jon Skeet 03.09.2010, 09:24
quelle
6

nein nicht immer:

%Vor%     
Tim Carter 03.09.2010 09:27
quelle
2

Dieser Link spricht über Gleitkommaarithmetikeigenschaften und könnte sehr interessant sein:

FLOATING-POINT-FALLACIES

Suchen Sie insbesondere nach Eigenschaften von Beziehungen

    
digEmAll 03.09.2010 09:28
quelle

Tags und Links