![]() |
AW: Konversion von dezimal zu binär
Außerdem ist k für 32 Digits > MaxInt :wink:
|
AW: Konversion von dezimal zu binär
Zitat:
Alle Daten ob Strings, Integers, oder Extended-Werte sind letztendlich binäre Daten. Wenn jemand sein Wissen darüber nutzt, um zu einer Lösung zu kommen, dann ist das nicht unfair sondern vernünftig. Der TE hatte ja seine "number" als Extended deklariert. Die unten stehende Funktion nutzt die binäre Darstellung im Extended-Wert um ohne weitere Umwege den Extended in einen Binärstring umzuwandeln. Sie ist für Werte von 0 bis 2^64-1 ausgelegt. Bei Werten außerhalb dieses Bereiches wird eine Exception ausgelöst. Ich hab die Funktion "auf die schnelle" geschrieben und nicht wirklich voll ausgetestet. Bitte keine Schimpfe wenn da Bugs drin sind.
Delphi-Quellcode:
FUNCTION ExtendedToBin(const v:extended):string;
type TExt=packed record M:UInt64; E:word; end; const Bias=$3FFF; Sign=$8000; MaxE=Bias+63; sErr='Fehler bei Umwandlung in Binärstring.'; var e:word; i:integer; begin e:=TExt(v).E; if e>0 then begin if (e>=Sign) or (e<Bias) or (e>MaxE) then raise Exception.Create(sErr); dec(e,Bias); if (e<63) and (((UInt64(1) shl (63-e) - 1) and TExt(v).M)<>0) then raise Exception.Create(sErr); end; SetLength(result,e+1); for i:=1 to e+1 do result[i]:=Chr($30 or Ord(TExt(v).m and (UInt64(1) shl (64-i))<>0)); end; |
AW: Konversion von dezimal zu binär
Zitat:
Zitat:
|
AW: Konversion von dezimal zu binär
Zitat:
|
AW: Konversion von dezimal zu binär
Zitat:
|
AW: Konversion von dezimal zu binär
Zitat:
Sie existieren nur in der Phantasie der floating Points, wobei sich die Funktion 'Power' Mühe gibt, ihre Phantasiebits für sich zu behalten. Und wir müssen doch wohl nicht ernsthaft über floating point, Rundungsfehler etc. diskutieren, oder? Du weisst Doch genau, wie himitsu es meinte. |
AW: Konversion von dezimal zu binär
Zitat:
Bei mir ist ihre Existenz sehr real. Wenn du dir mal die Mühe gemacht hättest den Code #12 anzusehen, dann wüßtest du, dass man auf die Bits eines Extendeds (wenn er im Bereich -2^64+1 bis 2^64-1 liegt) genau so einfach zugreifen läßt wie auf die eines Integers. Wenn also jemand meint, beim Extended existieren diese Bits nur in der Phantasie, dann muss er eigentlich auch meinen, dass bei einem Integer die Bits nur in der Phantasie existieren. Und zum "Und wir müssen doch wohl nicht ernsthaft über floating point, Rundungsfehler etc. diskutieren, oder?" Ich habe mit keinem Wort Rundungsfehler angesprochen. Was soll also dieser Kommentar. |
AW: Konversion von dezimal zu binär
Ich glaube, alle haben aneinander vorbeigeredet. Nimms nicht so schwer, es ist Freitag.
Du konvertierst über Extended (Floating Point!!!1!!11!) jemand schmeisst ein "Power(x,y)" da mit rein ("Rundungsfehler!!1!!Elf!!") und dann kommen die üblichen Automatismen. Ach, und braune Flecken auf Bananen waren auch dabei. Allerdings kommentarlos. Interessant, das Ganze. |
AW: Konversion von dezimal zu binär
Zitat:
Zitat:
|
AW: Konversion von dezimal zu binär
Also vorneweg danke für die alternative Lösung aber ich wär ganz froh wenn ich das Programm mit meiner ursprünglichen Idee ans Laufen bekommen würde.
Habe mir den Ratschlag dass der array zu klein ist zu Herz genommen und micht über SetLength informiert (und es eingebaut). Klappen tut es immer noch nicht.
Delphi-Quellcode:
--> Debugger Exception Notification: Project ex69.exe raised exception class ErangeError with message 'Range check error'. Process stopped. Use Step or Run to continue.
program ex69;
{$APPTYPE CONSOLE} uses SysUtils, math; var number:extended; i,k:integer; square:array of integer; begin { TODO -oUser -cConsole Main : Insert code here } {$Q+} {$R+} readln(number); i:=0; while number>power(2,i) do inc(i); k:=i; setlength(square,k); while (number<>0) do begin while number>power(2,i) do inc(i); i:=i-1; number:=(number-(power(2,i))); square[i]:=1; end; for i:=k downto 0 do writeln(square[i]); readln; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 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