![]() |
Re: Addieren in if Abfrage
Zitat:
0,2*2=0,4 -0 MSB 0,4*2=0,8 -0 0,8*2=1,6 -1 0,6*2=1,2 -1 0,2*2=0,4 -0 LSB usw, du siehst es ist kein Ende in Sicht, das Spielchen könnte man ewig so weiter treiben. Andere Zahlen hingegen lassen sich sehr gut Darstellen, wie zB 0,5 0,5*2=1 -1 MSB/LSB Du kannst auch Spaßeshalber mal einem Float-Wert zB 0,2 zuweisen, einen haltepunkt auf die Zeile dahinter setzen und dir das Ergebnis im Debugger anschauen. |
Re: Addieren in if Abfrage
Wer keine Math-Unit hat, der kann sich leicht einen eigenen Epsilon-Test implementieren:
Delphi-Quellcode:
function IsZero(value: Extended; epsilon: Extended = 0): Boolean;
begin if epsilon = 0 then epsilon := 1E-15 else epsilon := Abs(epsilon); Result := Abs(Value) <= epsilon; end; function IsEqual(value1, value2: Extended): Boolean; begin Result := IsZero(value1 - value2); end; |
Re: Addieren in if Abfrage
Danke für die extrem schnelle und gute Hilfe!!
Für meine Zwecke reicht extended erstmal, es ging nur darum per Bruteforce das hier zu lösen: a+b+c+d=9,27 a*b*c*d=9,27 Da es sich um einen ![]() Und den Algorithmus habe ich ja alleine geschrieben nur das er, aus mir bis dahin unersichtlichen Gründen, nicht funktioniert hat. Danke nochmal! :hello: Ich habe jetzt auch verstanden warum das ganze in delphi bzw in anderen Programmiersprachen bzw im Binärsystem so schwer ist. |
Re: Addieren in if Abfrage
Ich verweise da mal auf
![]() |
Re: Addieren in if Abfrage
Zitat:
Delphi-Quellcode:
:zwinker:
function IsZero(value: Extended; epsilon: Extended = 1E-15): Boolean;
begin Result := Abs(Value) <= Abs(epsilon); end; function IsEqual(value1, value2: Extended): Boolean; begin Result := IsZero(value1 - value2); end; |
Re: Addieren in if Abfrage
Hallo Xong,
die Signatur von IsZero() war bei mir von der Unit Math vorgegeben. Die von dir eingeführte Eleganz hat den Nachteil, dass der Fall Epsilon = 0 zugelassen wird - genau das aber wollen wir alle in diesem Thread verhindern. Übrigens: Math.SameValue() liefert falsche Ergebnisse, sobald ein negativer Wert für Epsilon übergeben wird, weil intern kein Absolutbetrag gebildet wird. Freundliche Grüße |
Re: Addieren in if Abfrage
Zitat:
Und zu guter Letzt: Der Fall "0" wird zugelassen! Mir fallen dafür sogar (wenn auch nur exemplarische) Anwendungen ein. (Z.B. Überprüfung der Fehlerfortpflanzung bei mathematisch äquivalenten Termen.) LG, Xong EDIT: Ich hab recht! :P |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz