Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Größe von Extended (https://www.delphipraxis.net/211117-groesse-von-extended.html)

Willie1 30. Jul 2022 17:08

Größe von Extended
 
Hallo Leute,
Zitat:

BeschreibungRepräsentiert einen Gleitkommawert mit hoher Genauigkeit.

Der Typ System.Extended bietet eine höhere Genauigkeit, ist aber nicht so einfach portierbar wie andere reellen Typen. Verwenden Sie System.Extended mit Bedacht, wenn Sie Datendateien anlegen, die plattformübergreifend genutzt werden sollen. Beachten Sie Folgendes:

Auf Win32-Systemen beträgt die Größe von System.Extended 10 Byte.
Auf Win64-Systemen ist der System.Extended-Typ aber ein Alias für den Typ System.Double, der nur 8 Byte groß ist. Diese Differenz kann die numerische Genauigkeit von Gleitkommaoperationen nachteilig beeinflussen. Weitere Informationen dazu finden Sie unter Delphi-Gesichtspunkte für plattformübergreifende Anwendungen..
Auf MAC OS X-Systemen beträgt die Größe von System.Extended 16 Byte, um mit BCCOSX kompatibel zu sein.
Der folgende Code zeigt auf Win32 10, auf Win64 8 und auf MAC OS X 16 an.

Zitat aus der Delphi-Hilfe.
Dann ist doch Extended = Double. Was soll dann Extended? Ich habe SizeOf(Extended) benutzt und erhalte 10. Das ist doch nicht Double und stimmt mit der Hilfe nicht überein.
Was ist Extended? Ich hab' Windows 10-64 Bit.
Gruß Willie.

KodeZwerg 30. Jul 2022 17:42

AW: Größe von Extended
 
Hallo Willie!
Zitat:

Zitat von Willie1 (Beitrag 1509511)
Was ist Extended? Ich hab' Windows 10-64 Bit.

Je nachdem wie du ein Kompilat (Ziel-Platform) erstellst, stell der Typ Extended genau wie die Hilfe es beschreibt dar.
Ähnlichkeit zu einem Double hat es unter Windows 64bit wenn Du auch ein 64bit Kompilat erzeugst.

Zitat:

Zitat von Willie1 (Beitrag 1509511)
Ich habe SizeOf(Extended) benutzt und erhalte 10. Das ist doch nicht Double und stimmt mit der Hilfe nicht überein.

Dann war Dein Kompilat für 32bit erstellt und das Ergebnis stimmt mit der Aussage der Hilfe überein.

Willie1 30. Jul 2022 17:59

AW: Größe von Extended
 
Hallo CodeZwerg,
ich habe verstanden. Danke.

Dann sollte Embacadero auf die Zielplattform hinweisen. Gerade Delphi wird auch von Anfängern und Hobby- Programmierern genutzt.
Gruß Willie.

himitsu 30. Jul 2022 18:37

AW: Größe von Extended
 
Zitat:

Zitat von Willie1 (Beitrag 1509513)
Dann sollte Embacadero auf die Zielplattform hinweisen.

Das tun sie doch?




Die Größe sagt auch garnichts aus.

Die 16 Byte unter OSX ist nur der belegte, aber nicht der verwendete Speicher.



Extended war nie für die direkte Verwendung uns schon garnicht zur Speicherung gedacht.
Also kein Wunder, wenn die CPU-Hersteller diesen Typen beim x64 vergessen nicht beachtet haben.


Die Meisten werden eh nur Probleme bekommen, wenn sie diesen Typen speichern/übertragen und in einer anderen Platform lesen/empfangen.

Oder wenn sie grob fahrlässig binär auf dessen Inhalt zugreifen.

KodeZwerg 30. Jul 2022 19:06

AW: Größe von Extended
 
Zitat:

Zitat von Willie1 (Beitrag 1509513)
Hallo CodeZwerg,
ich habe verstanden. Danke.

Dann sollte Embacadero auf die Zielplattform hinweisen. Gerade Delphi wird auch von Anfängern und Hobby- Programmierern genutzt.
Gruß Willie.

Ich gebe Dir Recht und unrecht :o
Man kann die Aussage der Hilfe schon für voll nehmen aber ich gebe Dir Recht das es missverstanden werden kann.

Erläuterung:
Wenn Du ein 32bit Kompilat hast und auf einem 64bit System ausführst, läuft es im 32bit Subsystem, die Hilfe deutet halt nur im allgemeinen auf ein OS hin.

Uwe Raabe 30. Jul 2022 19:51

AW: Größe von Extended
 
Zitat:

Zitat von Willie1 (Beitrag 1509511)
Ich hab' Windows 10-64 Bit.

Es wäre schon sehr seltsam, wenn die Größe eines Datentyps vom Betriebssystem des Entwicklunsgrechners abhängen würde.

TurboMagic 31. Jul 2022 09:27

AW: Größe von Extended
 
Zitat:

Zitat von himitsu (Beitrag 1509515)
Zitat:

Zitat von Willie1 (Beitrag 1509513)
Dann sollte Embacadero auf die Zielplattform hinweisen.

Das tun sie doch?

Die Größe sagt auch garnichts aus.

Die 16 Byte unter OSX ist nur der belegte, aber nicht der verwendete Speicher.



Extended war nie für die direkte Verwendung uns schon garnicht zur Speicherung gedacht.
Also kein Wunder, wenn die CPU-Hersteller diesen Typen beim x64 vergessen nicht beachtet haben.


Die Meisten werden eh nur Probleme bekommen, wenn sie diesen Typen speichern/übertragen und in einer anderen Platform lesen/empfangen.

Oder wenn sie grob fahrlässig binär auf dessen Inhalt zugreifen.

Alsi ich hab' im entsprechenden Hilfetext keinen Hinweis darauf gefunden, dass die Größe von der ausgewählten Build Plattform abhängt.
Ich kann schon verstehen, wenn Novizen ein für Win32 Programm compiliertes Programm unter Win64 ausführen und sich dann wundern, dass
Extended trotzdem 10 Byte groß ist.

Gelesenes Hilfethema:
https://docwiki.embarcadero.com/Libr...ystem.Extended

Daher erfasst:
https://quality.embarcadero.com/browse/RSP-38772

Grüße
TurboMagic

KodeZwerg 31. Jul 2022 10:07

AW: Größe von Extended
 
Zitat:

Zitat von TurboMagic (Beitrag 1509530)
Daher erfasst:

System.Extended
Zitat:

On Intel 32-bit Windows systems, the size of System.Extended is 10 bytes.
Jetzt frage Dich doch mal selbst, wenn Du eine 32bit Applikation auf einem 64bit OS ausführst, wird es dadurch automatisch zu einer 64bit Applikation?

//edit
Was ich damit sagen möchte, 32bit app auf 64bit OS = 32-bit Windows system = die Hilfe in welcher Sprache auch immer hat Recht.

Uwe Raabe 31. Jul 2022 10:28

AW: Größe von Extended
 
Es geht nicht darum, ob die Hilfe Recht hat oder nicht - was da steht stimmt natürlich. Es kann offensichtlich aber missverstanden werden. Das ist zwar jetzt schon seit einigen Jahren noch nicht passiert, aber irgendwann ist ja immer das erste Mal.

Andreas13 31. Jul 2022 10:40

AW: Größe von Extended
 
Hallo,
Zitat:

https://docwiki.embarcadero.com/Libr...ystem.Extended
On Intel 64-bit Windows systems and all ARM systems, including iOS 64-bit, Android 32-bit and 64-bit and macOS 64-bit, however, the System.Extended type is an alias for System.Double, which is only 8 bytes. This difference can adversely affect numeric precision in floating-point operations. For more information, see Delphi Considerations for Multi-Device Applications.

The following code displays 10 on Win32, 8 on Win64 and 16 on macOS and Linux.
Writeln(IntToStr(SizeOf(Extended)));

Das ist leider sehr salopp, irreführend und sogar falsch, denn: unter Windows hängt es ausschließlich von der Zielplattform ab.
Beispiel:

1):
Auf 64-bit Windows Systemen ist Extended bei einem Kompilat für die 32-Bit- Zielplattform immer noch 10 Bytes lang und hat daher die volle Rechengenauigkeit (80 Bit) des seit Anfang der 1990-er Jahre stets integrierten Mathematischen Coprozessors.

2):
Auf 64-bit Windows Systemen ist Extended bei einem Kompilat für die 64-Bit- Zielplattform nur noch 8 Bytes lang und entspricht dem Type Double.

Grüße, Andreas


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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