![]() |
Delphi-Version: 10.2 Tokyo
Float-Literale sind unumstößlich Extended?
Delphi-Quellcode:
ist kein Single, kein Double, sondern Extended. Da kann ich nichts dran machen, richtig? Keine Compilerschalter, nichts?
const someConstant = 3.14
![]() Zitat:
|
AW: Float-Literale sind unumstößlich Extended?
Probier mal so
Delphi-Quellcode:
Const
kFeetToMeter: Double = 3.2808; |
AW: Float-Literale sind unumstößlich Extended?
Ja, ich weiß dass ich Konstanten typisieren kann, aber ich meinte wirklich wenn im Quelltext einfach
Delphi-Quellcode:
steht. Ich weiß dass ich auch
3.14
Delphi-Quellcode:
schreiben könnte, aber es wäre natürlich schön wenn ich da herum käme...
Single(3.14)
|
AW: Float-Literale sind unumstößlich Extended?
Woher soll der Compiler denn wissen, welche Genauigkeit du haben willst, wenn du es ihm nicht sagst?
|
AW: Float-Literale sind unumstößlich Extended?
Irgendwie schon komisch, dass das ansonsten so typenvernarrte Pascal bei Konstanten son untypisierten Blödsinn zulässt :gruebel:
|
AW: Float-Literale sind unumstößlich Extended?
Zitat:
Die Zahl 3.14 lässt sich zufälligerweise exakt als Double darstellen. Prüf mal
Delphi-Quellcode:
.
Sizeof(someConstant)
|
AW: Float-Literale sind unumstößlich Extended?
Zitat:
|
AW: Float-Literale sind unumstößlich Extended?
Per se ist das erstmal garkein bestimmter Typ, denn dieser "Wert" wird an den Stellen eingesetzt (ähnlich einem Makro), wo er verwendet wird, und dort entscheidet sich dann jeweils der Typ, anhand dessen wo er zugewiesen wird.
Im Zweifelsfall ist es aber natürlich der größere Typ. Die typisierten Konstanten sind "schreibgeschützte" Variablen, wo am Verwendungsort ein Zeiger darauf eingesetzt wird.
Delphi-Quellcode:
const
kFeetToMeter = 3.2808; // echte Konstante kFeetToMeter = Double(3.2808); // echte Konstante mit Vorgabe, kann am Verwendungsort sich aber noch ändern kFeetToMeter: Double = 3.2808; // typisierte Konstante |
AW: Float-Literale sind unumstößlich Extended?
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, aber ich stimme euch nicht zu.
Erstens:
Delphi-Quellcode:
Hier wird definitiv die Extended-Version aufgerufen.
program Project1;
{$APPTYPE CONSOLE} procedure acceptFloat(const input: Single) overload; deprecated 'Single'; begin // end; procedure acceptFloat(const input: Double) overload; deprecated 'Double'; begin end; procedure acceptFloat(const input: Extended) overload; deprecated 'Extended'; begin end; begin acceptFloat(3.14); end. Und zweitens: Wenn ich den Mauszeiger auf eine untypisierte Float-Konstante halte bekomme ich einen Tooltip der glasklar "Extended" sagt: Anhang 52023 Edit: Aber
Delphi-Quellcode:
sagt tatsächlich 8, obwohl definitiv die Extended-Überladung aufgerufen wird. Jetzt bin ich noch verwirrter als vorher.
SizeOf(myConst)
|
AW: Float-Literale sind unumstößlich Extended?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:06 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