AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Float-Literale sind unumstößlich Extended?

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

Registriert seit: 12. Aug 2003
Ort: Soest
3.668 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
7.349 Beiträge
 
Delphi 10.3 Rio
 
#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
35.216 Beiträge
 
Delphi 10.3 Rio
 
#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.
Delphi-Tage 2005-2014

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
5.120 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
35.216 Beiträge
 
Delphi 10.3 Rio
 
#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.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.120 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
686 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#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.383 Beiträge
 
Delphi 10.3 Rio
 
#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
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf