AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

4-Byte-Single

Ein Thema von Mr. G · begonnen am 15. Jul 2005 · letzter Beitrag vom 15. Jul 2005
Antwort Antwort
Mr. G

Registriert seit: 15. Jul 2005
3 Beiträge
 
#1

4-Byte-Single

  Alt 15. Jul 2005, 11:39
Wie lang ist die Mantisse bei einem 4 Byte-Single ?
23 Bit-Länge möchte ich eigentlich ausschließen, da
ich dann beispielsweise bei der Dezimalzahl 0,6 einen
Wert von 0,599999... herausbekomme, Delphi mir aber
einen Wert über 0,6 liefert.

Bin dankbar für jede Antwort.
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#2

Re: 4-Byte-Single

  Alt 15. Jul 2005, 11:44
23 ist schon richtig

aber es gibt ne rundung bei der letzten mantissenstelle
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: 4-Byte-Single

  Alt 15. Jul 2005, 12:11
Wichtig: das ist eine Binär-Mantisse, 23 Bits. Das entspricht 23*log(2)/log(10) Dezimalstellen, also ~6,92.

Es gibt endliche Dezimalbrüche (z.B. 0,6), die man nicht als endliche Binärbrüche schreiben kann -> daher die 0,599999. Es hilft nur, wenn du Dezimal auf eine feste Stelle vorher rundest, also z.B. auf 5 Stellen (nicht Nachkommastellen sondern signifikante Stellen!).
Volker
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: 4-Byte-Single

  Alt 15. Jul 2005, 13:02
Zitat von Mr. G:
Wie lang ist die Mantisse bei einem 4 Byte-Single ?
23 Bit-Länge möchte ich eigentlich ausschließen, da
ich dann beispielsweise bei der Dezimalzahl 0,6 einen
Wert von 0,599999... herausbekomme, Delphi mir aber
einen Wert über 0,6 liefert.
Bin dankbar für jede Antwort.
Manchmal hilft es auch wenn man sich anschaut wie die Werte im Speicher abgelegt werden.

Mach mal ein Neues Projekt, mit drei TEdit Feldern (Edit1, Edit2, Edit3) und einem TButton.
Auf den Button legst Du nun folgenden Quelltext:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  x : record
        case Boolean of
          True: (s: Single); // hier kann natürlich auch ein ander Typ stehen
          False: (b: array[0..3] of Byte); // das Array sollte so groß sein wie der Typ (hier 4 byte)
      end;
  s, s2: string;
  i: Integer;
const
  Hex2BinA : Array['0'..'9'] of string = ('0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001');
  hex2BinB : Array['A'..'F'] of String = ('1010', '1011', '1100', '1101', '1110', '1111');
begin
  x.s := StrToFloat(Edit1.Text); // In Edit1 steckt der eingegebene reelle Wert
  s := '';
  for i := 0 to 3 do
    s := s + IntToHex(x.b[i],2);
  Edit2.Text := s; // In Edit2 wird der hexadezimale Wert ausgegeben

  for i := 1 to length(s) do
  begin
    if s[i] in ['0'..'9'] then s2 := s2 + hex2binA[s[i]]
                          else s2 := s2 + hex2binB[s[i]];
    if i mod 2 = 0 then s2 := s2 + ' ';
  end;
  Edit3.Text := s2; // In Edit2 wird der binäre Wert ausgegeben
end;
In Edit1 gibst Du einen Singel Wert ein z.B. 1,5 und drückst auf den Button
In Edit 2 siehst Du in hexadezimaler Form wie es abgelegt ist
In Edit 3 siehst Du es in binärer Form (Leerzeichen zw. den bytes)

Anmerkung:
Ich weiß, Int2Bin kann man auch eleganter lösen.
Die Methode ist nur mal eben schnell (quick and dirty) geschrieben.
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:41 Uhr.
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