![]() |
Re: b <> 0
Das geht nicht (sofern nicht die FPU-Exception ausgeschaltet wird), denn Dividend/Divisor wird in jedem Fall ausgewertet.
|
Re: b <> 0
Check
|
Re: b <> 0
Ich weiß nicht in wie weit das unter Delphi mit Standardtypen möglich ist, sonst könntest du den / Operator überladen und das Typweit abfangen und dein Wunschergebnis zurückliefern
Delphi-Quellcode:
Getippt, nicht getestet
type
TMySingle = record Value: Single; class operator Divide(a: TMySingle; b: TMySingle): TMySingle; [...] class operator TMySingle.Divide(a: TMySingle; b: TMySingle): TMySingle; begin result.Value := a.Value; if b.Value <> 0 then result.Value := result.Value / b.Value end; |
Re: b <> 0
Zitat:
|
Re: b <> 0
da auf ungleich 0 geprüft wird kann man es auch gleich als Boolean interpretieren:
Delphi-Quellcode:
if Boolean(b) then
a := a / b; |
Re: b <> 0
Es ist schon sehr nett anzusehen, was alles zustande kommt, wenn man nur eine "poplige" Anweisung umschreiben möchte. :)
|
Re: b <> 0
Zitat:
isNAN entsteht dann, wenn man unendlich durch unendlich teilt. Diese Zustände des Unendlichen und "Not a Number" sind klar definiert für Fließkommazahlen bei IEEE (neben dem Unterschied zwischen +0 und -0). Unendlich oder NAN sind definiert wenn im Exponenten alle bits Gesetzt sind. Bei Unendlich ist die Mantisse 0 bei NAN <>0. |
Re: b <> 0
0/0 erzeugt auch NAN.
|
Re: b <> 0
Ist B eigentlich ein Integer, oder 'nen Float?
wenn B = Float (z.B. Single/Double/Extendet), dann ist ein genauer Vergleich doch nicht gut?
Delphi-Quellcode:
if not IsZero(b) then a := a / b;
bei B = Integer und größer 0 ginge auch noch sowas:
Delphi-Quellcode:
a := a / Max(b, 1);
|
Re: b <> 0
Du meintest wohl Max, den wenn b = 0 ist, ist b<1 und er teilt durch b, also 0 :wink:
Es scheint aber kein Integer zu sein, denn ansonsten würde es ohne Round(..) nicht funktionieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 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