AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Float-Literale sind unumstößlich Extended?

Ein Thema von Der schöne Günther · begonnen am 20. Jan 2020 · letzter Beitrag vom 18. Apr 2020
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#11

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 10:53
Delphi-Quellcode:
{$APPTYPE CONSOLE}

uses
  SysUtils,
  TypInfo;

type
  TypeHelper = record
    class function TypeOf<T>(const value: T): string; static;
  end;

class function TypeHelper.TypeOf<T>(const value: T): string;
begin
  Result := PTypeInfo(TypeInfo(T)).Name + ' kind: ' + GetEnumName(TypeInfo(TTypeKind), Ord(GetTypeKind(T))) + ' size: ' + SizeOf(T).ToString;
end;

const
  c = 3.14;
begin
  Writeln(TypeHelper.TypeOf(3.15));
  Writeln(TypeHelper.TypeOf(c));
  Readln;
end.
Außerdem kompiliert das hier nicht:
Delphi-Quellcode:
const
  kFeetToMeter = Double(3.2808);
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (21. Jan 2020 um 10:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#12

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 12:47
Ist ja interessant! Woher kommt dann aber die 8 für Sizeof(c)?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#13

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 13:21
Ist ja interessant! Woher kommt dann aber die 8 für Sizeof(c)?
Delphi-Quellcode:
const
  A = 1;
  B = 10000;
  C = $FFFFFFFF;
  D = Integer($FFFFFFFF); // -1
  F = 0.5;
  G = 1.333333333;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowMessage(Format('%d %d %d %d %d %d', [SizeOf(A), SizeOf(B), SizeOf(C), SizeOf(D), SizeOf(F), SizeOf(G)]));
  // 32 Bit: 1 2 4 4 8 10
  // GetTypeName(TypeInfo(F)) oder PTypeInfo(TypeInfo(F)).Name geht nicht
end;
Für untypisierte Konstanten nimmt Delphi meistens erstmal den kleinst möglichen Typen und wenn die spätere Verwendungsstelle keinen anderen Typen vorgibt, dann wird er dort so verwendet.
Bei Floats, wird aber eher oft auf das Größere gegangen, wegen eventueller Rundungsfehler.



Tja, rein theoretisch wäre SizeOf für untypisierte Konstanten nicht verwendbar und teilweise ist sowas auch nicht kompilierbar.


Ich würde eher empfehlen du vergisst Extended.
Single, Double und Currency sind die Typen für gebrochene Zahlen und davon ist Double der Größte. Kommt doch mal irgendwo ein Extended vor, dann ist es zumindestens kein Nachteil.

Offiziell war Extended nie als Speichertyp vorgesehen (nur für die Berechnungen innerhalb der CPU, bzw. für temporäre Variablen/Zwischenergebnisse des Compilers).
Bezütlich 64 Bit-Compilate und der CrossCompiler wurde das in Delphi nun angepasst.
Zitat von ein x87-Designer und die Intel Corporation:
The temporary real (extended) format was designed not to store data at higher precision as such, but rather primarily to allow for the computation of double results more reliably and accurately by minimising overflow and roundoff-errors in intermediate calculations
Drum ist der Typ in anderen höheren Programmiersprachen nicht verfügbar, bzw. wird selten als Variablentyp benutzt. ("long double" in C/C++)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (21. Jan 2020 um 13:27 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 14:01
Ich würde eher empfehlen du vergisst Extended.
Das würde ich ja so gerne. Nur nimmt der Delphi-Compiler für Überladungen ja immer Extended an wenn man eine Zahl schreibt. Das würde ich gerne auf z.B. Single oder Double ändern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#15

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 14:30
Nur nimmt der Delphi-Compiler für Überladungen ja immer Extended an wenn man eine Zahl schreibt.
Aber auch nur, weil du ihm diese Überladung anbietest
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#16

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 16:56
Das Ganze ist trotzdem irgendwie ein Mysterium. 💫
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.442 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Float-Literale sind unumstößlich Extended?

  Alt 21. Jan 2020, 17:24
Nein.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#18

AW: Float-Literale sind unumstößlich Extended?

  Alt 22. Jan 2020, 08:38
Kurz und knapp, ich verstehe Dein Problem nicht: Du weißt, was passiert, Du weißt wie Du es vermeiden kannst, Du willst aber, das es automatisch geht. Korrekt zusammengefaßt?

Automatismen sind nur für die breite Masse und dienen der Vermeidung von Problemen, darum wird immer der Weg gewählt, der die geringsten Probleme erwarten läßt. Solltest Du hierbei ein Problem für die breite Masse sehen, erstell eben ein Ticket.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Jost Riedel

Registriert seit: 25. Mär 2020
5 Beiträge
 
#19

AW: Float-Literale sind unumstößlich Extended?

  Alt 18. Apr 2020, 00:57
In dem Pascal, das Niklaus Wirth erfunden hat, und auch in den ersten Turbo-Pascal Versionen, war es ganz schlicht so: Eine Konstante war ein Platzhalter für ein Literal, wurde also erst ausgewertet bei Verwendung (wie ein Macro).

Bei Overloads klappt das nicht mehr - die werden nach Typ selektiert, also muß dort auch eine Heuristik für eine Typauswahl funktionieren. Und die funktioniert ganz gut. Wer eine feinere Kontrolle braucht: Da gibt es Möglichkeiten.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
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