Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Nullable oder NaN (https://www.delphipraxis.net/212258-nullable-oder-nan.html)

freimatz 13. Jan 2023 14:33

Nullable oder NaN
 
Hallo,
manchmal habe ich einen Wert als Double, manchmal aber auch nicht. Oft nehme ich dann ein Nullable<>. Könnte man bei einem Double nicht auch NaN nehmen? Das bedeutet doch Not a Number. Wäre eine Zuweisung mit NaN und eine Abfrage mit System.Math.IsNan zuverlässig?

himitsu 13. Jan 2023 14:50

AW: Nullable oder NaN
 
Natürlich.

NaN, Infinity und NegInfinity sind gültige Werte eines Float-Types.


(nur bezüglich Berechnungen und Vergleichen ala
Delphi-Quellcode:
=
... da kommt's drauf an, wie die FPU konfiguriert ist, also ob sie dann eine Exception wirft)

Der schöne Günther 13. Jan 2023 15:38

AW: Nullable oder NaN
 
Ich bin kein Freund von Dingen wie
Delphi-Quellcode:
NaN
bei einer Fließkommazahl oder
Delphi-Quellcode:
-1
für eine Ganzzahl um etwas wie "Wert ist nicht vorhanden" oder so zu signalisieren.

Wenn es wirklich etwas ist, das fünf Millionen mal aufgerufen wird und jede Millisekunde zählt - Dann meinetwegen. Aber in 99% der Fälle ist das bisschen Overhead für einen Typ wie
Delphi-Quellcode:
Nullable<Single>
für bessere Quelltext-Lesbarkeit gut investiert.

Rollo62 13. Jan 2023 16:02

AW: Nullable oder NaN
 
Ich nutze das schon, da wo es Sinn macht, und die Funktionen die damit arbeiten können kennzeichne ich deutlich als "NaN-Safe".

freimatz 14. Jan 2023 11:08

AW: Nullable oder NaN
 
Hoi, Danke für alle Rückmeldungen. Den akuten Fall habe ich jetzt anders gelöst. Es bleibt für mich aber schon interessant.
@Günther: Gerade das Nullable finde ich in manchen Fällen nicht so lesbar. Andererseits ist da deutlicher was damit gemeint ist.
Mehr als die Geschwindigkeit sehe ich den Speicherverbrauch. Ein Double benötigt m.W. 8 Byte. Ein Nullable vermute ich mal auf 4 mehr. Intern wird ein String missbraucht. Die Diskussion zu der Implementierung habe ich mal gelesen, geht wohl nicht besser. (Eine native Implementierung von EMB wäre wohl besser aber nicht zu erwarten.)
Wenn man nun ein Array von 10000 Vektoren (x,y,z) hat, dann ist das schon relevant.
@Rollo: wo es Sinn macht ... hast Du ein Beispiel?

himitsu 14. Jan 2023 11:14

AW: Nullable oder NaN
 
So gesehn ... Warum soll man es kompliziertet/aufwändiger machen, wenn es NaN bereits gibt und es keinen Grund gibt es nicht zu benutzen?

Uwe Raabe 14. Jan 2023 13:27

AW: Nullable oder NaN
 
Zitat:

Zitat von freimatz (Beitrag 1517414)
Ein Double benötigt m.W. 8 Byte. Ein Nullable vermute ich mal auf 4 mehr.

Bei Win64 dann schon 8...

himitsu 14. Jan 2023 14:22

AW: Nullable oder NaN
 
Zitat:

Zitat von freimatz (Beitrag 1517414)
Die Diskussion zu der Implementierung habe ich mal gelesen, geht wohl nicht besser.

Jetzt, mit den CustomManagedRecords, schon.

Früher konnte man nur mit LongString, Interface oder Variant halbwegs "einfach" arbeiten, da mit automatischem Speichermangement/Initialisierung und Referenzzählung, bzw. automatischem CopyOnWrite.

Rollo62 14. Jan 2023 17:14

AW: Nullable oder NaN
 
Zitat:

Zitat von freimatz (Beitrag 1517414)
@Rollo: wo es Sinn macht ... hast Du ein Beispiel?

Ich nutze das z.B. für simple Messages mit ausschliesslich primitiven Typen, wo das Messaging von Nullable-Records oder anderen Inkarnationen zu aufwändig wäre.
Da könnte man man bei Bedarf auch beim Sender von einem Nulable in ein entsprechendes NaN-Integer wandeln und am Empfänger wieder zurück.

Jedenfalls nutze ich das auch dort wo nicht nur Kommunikation innerhalb der eigenen App in Frage kommt,
sondern es mit anderen Apps/Geräten im Netzwerk kommunizieren muss, unter Umständen mit ganz anderen Programmiersprachen.
Simple Typen wie Integer gehen da eigentlich immer sind in der Regel direkt lesbar und sind leicht zu konvertieren.

Dennis07 15. Jan 2023 16:19

AW: Nullable oder NaN
 
Was für ein Nullable überhaupt?
Das aus Spring4D oder gibt es in Delphi inzwischen ein richtiges in der RTL?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz