![]() |
AW: Power funktioniert nicht wie gedacht
Zitat:
|
AW: Power funktioniert nicht wie gedacht
Ich bin mir unsicher aber ich glaube
Delphi-Quellcode:
funktioniert nicht, selbst wenn I Int64 ist.
I := Round(System.Math.Power(1024, 7))
Der Fehler lautet Zitat:
|
AW: Power funktioniert nicht wie gedacht
Zitat:
|
AW: Power funktioniert nicht wie gedacht
Naja, grob überschlagen müsste 1024^7 eine Zahl mit 21 Stellen ergeben, das ist schon mächtig groß.
|
AW: Power funktioniert nicht wie gedacht
Würde ein Hardcast auf Int64 die Zahl verkleinern und keinen Fehler mehr erzeugen?
Schematisch
Delphi-Quellcode:
I := Int64(1024^7);
|
AW: Power funktioniert nicht wie gedacht
Nützt nix. Wie bereits weiter oben erwähnt werden Werte vom Typ int64 in 64 Bits gespeichert.
1024(10) = 10000000000(2) (eine 1 mit 10 Nullen) 1024^2(10) = 100000000000000000000(2) (eine 1 mit 20 Nullen) 1024^3(10) = 1000000000000000000000000000000(2) (eine 1 mit 30 Nullen) ... 1024^7(10) ergibt binär eine 1 mit 70 Nullen, also eine 71 stellige binäre Zahl. ABER: Die grösste positive Zahl, welche du mit einem int64 speichern kannst ist 63 stellig: 1111...….11111(2) (63 1er) = 2^63-1 (10). D.h. : Du kannst die 1024^7 nicht in einen int64 quetschen ;-). |
AW: Power funktioniert nicht wie gedacht
Zitat:
Delphi-Quellcode:
Das ergibt dann die falschen Werte
uses system.math;
var x: double; I: int64 absolute x; begin x := power(double(1024),7); writeln('I absolute: ', I); {$r-,q-} I := 1024*1024*1024; I := I*1024*1024; I := I*1024*1024; writeln('I als Produkt ', I); end.
Code:
I absolute: 4922434392715952128
I als Produkt 0 |
AW: Power funktioniert nicht wie gedacht
Wenn du bereit bist, die Zahl künstlich durch ein Typecast zu verringern, welche qualitativen Ansprüche stellst du denn an die in deinem ersten Beitrag erwähnte Umrechnung? Das widerspricht sich doch…
|
AW: Power funktioniert nicht wie gedacht
Naja, Ihm fehlte in dem Moment die Erinnerung an das Rechnen mit Potenzen.
Kann schon mal vorkommen. gruß K-H |
AW: Power funktioniert nicht wie gedacht
Vielleicht helfe ich euch und auch mir, wenn ich mein Problem erkläre.
Ich habe ein TEdit sowie eine TComboBox. Im Edit kann ich eine Zahl eingeben und in der ComboBox kann ich von Byte bis Gigabyte alles auswählen. Die eingegebene Zahl soll später in das umgerechnet werden, was ich in der ComboBox ausgewählt habe. Das schaffe ich. Aber wie außer mit try except fange ich Fehleingaben ab, sodass die Zahl niemals größer wird als 1099511627775 Bytes (1TB-1Byte) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:35 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