Ich möchte eine entsprechende Bitposition in einen String wandeln und anzeigen.
Das sollte aber mindestens bis 64 Bits, besser sogar bis 128..256 Bits funktionieren.
Weil spätestens bei Bitpos 2^57 stimmt es nicht mehr.
Also
Bitpos 0 = 1
Bitpos 1 = 2
Bitpos 4 = 16
Bitpos 15 = 32768
Bitpos 57 = 144115188075855872 Lazarus zeigt: 144115188075855870
Code: Alles auswählen
var BitPos : Byte;
var BitValue : Double;
procedure TForm1.FormCreate(Sender: TObject);
begin
BitPos := 63;
BitValue := power(2,BitPos);
caption := FloatToStrF(BitValue,ffNumber,1,0);
// 2^63 = 9223372036854775808
// Lazarus Ausgabe : 9223372036854775800
// Differnez = 8
end;
ich hab grad noch eine Binärwandlung geschrieben, auch hier stoße ich an Grenzen...
Code: Alles auswählen
// !!! geht nur bis 2 hoch 53 ????
// wandelt eien Double Wert in einen Binärstring
// ohne Kommastellen, also nur den Vorkomma Anteil
function DoubleToBin(value:Double):String;
var rest:Double;
begin
result:='';
While (value > 0) do begin
value:=value / 2;
rest:=Frac(value);
if (rest) > 0 then result:='1' + result
else result:='0' + result;
value:=value-rest;
end;
end;