🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.lang.c++
7 messages
7 total messages Started by Mark Halter Sun, 14 Jan 1996 17:43
float
#1272
Author: Mark Halter
Date: Sun, 14 Jan 1996 17:43
19 lines
1086 bytes
Hallo Leute,

kann mir jemand erklaeren, wie ein float-Zahl binaer dargestellt wird?


Bis die Tage 

Mark

------------------------------------------------------------------------

       _/     _/  _/_/_/_/  _/_/_/     _/    _/          Mark Halter   
      _/_/ _/_/  _/    _/  _/    _/   _/   _/
     _/  _/ _/  _/_/_/_/  _/_/_/     _/_/_/
    _/     _/  _/    _/  _/   _/    _/   _/
   _/     _/  _/    _/  _/     _/  _/     _/
                                     
                            e-mail : st000217@hrzpub.th-darmstadt.de
------------------------------------------------------------------------
Re: float
#1281
Author: Tom Wellige
Date: Sun, 14 Jan 1996 20:43
34 lines
2007 bytes
st000217 wrote on 14.01.96 about
"float":

> kann mir jemand erklaeren, wie ein float-Zahl binaer dargestellt wird?

Hallo Mark.

Ich bin mir nicht 100% sicher, aber ich leite mir sowas immer aus einer 
einfachen Ueberlegung heraus her:

Eine float-Zahl ist 4 Byte gross und umfasst den Zahlenbereich
3.4E-38 bis 3.4E38 . Da Manitsse und Exponent getrennt sind, ueberlege ich 
mir zuerst, wieviel Bits benoetigt werden, um den Exponenten darzustellen.
Da 77 verschiedene Zahlen moeglich sind, werden 7 Bits fuer den 
Exponenten benoetigt. Danach bleiben noch 25 Bits fuer die Mantisse uebrig.

           +----------------------------+--------+
           |   25 Bits                  | 7 Bits |
           +----------------------------+--------+
              Mantisse                    Exponent
              
Man moege mich korrigieren, wenn ich mich irren sollte.
              

  See you, Tom.
--
 +--------------------------+---------------------------------------------+
 | Tom Wellige              | BBS DISTEL (Dieburg, Germany)               |
 | Haller Weg 64            |    PICARD@distel.robin.de                   |
 | 33617 Bielefeld, GERMANY | Dublin Institute of Technology (Ireland)    |
 | +49 521 152474           |    TWELLIGE@dit.ie                          |
 | ** PGP key on request ** |    http://147.252.133.152/people/twellige/  |
 +--------------------------+---------------------------------------------+
## CrossPoint v3.1 R ##
Re: float
#1280
Author: Dietmar Kuehl
Date: Mon, 15 Jan 1996 05:08
49 lines
2988 bytes
Hi,
Mark Halter (st000217@hrz1.hrz.th-darmstadt.de) wrote:
: kann mir jemand erklaeren, wie ein float-Zahl binaer dargestellt wird?

Moechtest Du das informal wissen oder moechtest Du die exacte
Definition haben?  Letzteres ist System abhaengig und natuerlich
abhaengig von der Groesse der Zahl ('float', 'double', 'long double';
allerdings hast Du ja explizit nach 'float' gefragt, obwohl damit
normalerweise nicht gerechnet wird: es wird normalerweise mindestens
mit 'double' gerechnet). Die exakte Definition findest Du vermutlich am
ehesten im IEEE Standard.

Ungefaehr (informal) werden 'float's typischerweise folgendermassen
dargestellt: Der Wert wird berechnet als 'sign * mantisse * pow(base,
exponent)' (die Berechnung wird so natuerlich nicht durchgefuehrt: Die
Expression ist nur informal, um zu beschreiben, wie die Zahl
dargestellt wird), d.h. es wird eine Mantisse, ein Exponent und ein
Vorzeichen-Bit abgespeichert.  'base' ist abhaengig von der Hardware.
Typische Werte fuer 'base' sind 2 oder 16 (aus "POSIX Programmer's
Guide", D.Lweine, O'Reilly).  Die Anzahl der Bits, die zur Darstellung
von 'exponent' und 'mantisse' verwendet werden unterscheiden sich
ebenfalls auf verschiedenen Platformen (bei verschieden Compilern auf
der selben Platform sollten sie gleich sein; das ist allerdings nicht
unbedingt garantiert).

Die Mantisse wird so gespeichert, dass die Zahl mit '0.' beginnt. Dann
braucht man die Stelle vor dem Komma und die Position des Kommas nicht
zu speichern. Insgesamt sieht die Zahl also etwa so aus:

  0 1                     24 25     31
  | |                     |  |      |
  s mmmmmmmmmmmmmmmmmmmmmmm  eeeeeeee

Wobei 's' das Bit ist, das das Vorzeichen darstellt (etwa '1' =>
positiv; '0' => negativ), 'm' fuer ein Bit der Mantisse steht und 'e'
ein Bit des Exponenten ist. Die Anzahl der jeweiligen Bits muesste auf
ein 'float' auf einer Sparc-Station passen. Die Reihenfolge nicht
unbedingt... (ich habe gerade nichts da, was die IEEE Definition
enthaelt).

In 'float.h' sind eine Reihe von Konstanten definiert, mittels denen
man abschaetzen kann, wie ein 'float' (oder ein '[long] double')
dargestellt ist. Nach dem DWP sollte man dafuer 'numeric_limits'
verwenden (18.2.1; lib.limits). Allerdings habe ich keinen
Compiler/Library, der diese Template-Klasse definiert.
--
dietmar.kuehl@uni-konstanz.de
http://www.informatik.uni-konstanz.de/~kuehl
I am a realistic optimist - that's why I appear to be slightly pessimistic
Re: float
#1275
Author: Achim Gratz
Date: Mon, 15 Jan 1996 13:51
51 lines
2693 bytes
>>>>> "Dietmar" == Dietmar Kuehl <kuehl@uzwil.informatik.uni-konstanz.de> writes:

    Dietmar> Hi, Mark Halter (st000217@hrz1.hrz.th-darmstadt.de)
    Dietmar> wrote: : kann mir jemand erklaeren, wie ein float-Zahl
    Dietmar> binaer dargestellt wird?
[...]
    Dietmar> Die Mantisse wird so gespeichert, dass die Zahl mit '0.'
    Dietmar> beginnt. Dann braucht man die Stelle vor dem Komma und
    Dietmar> die Position des Kommas nicht zu speichern. Insgesamt
    Dietmar> sieht die Zahl also etwa so aus:

Die korrekte Zuordnung sieht so aus (IEEE 754, single precision):

  31|30....23|22.....0
sign|exponent|mantissa

Von der Mantisse fehlt das hoechstwertige Bit, weil die Normierung
immer auf 0.5xxxxxx (dezimal) durchgefuehrt wird und dieses Bit (von
denormalisierten Zahlen mal abgesehen) immer 1 ist.  Die Nummern an
den Bitstellen entsprechen der logischen Wertigkeit, wie das dann im
Speicher angeordnet ist legt der IEEE-Standard _nicht_ fest.

    Dietmar> Wobei 's' das Bit ist, das das Vorzeichen darstellt (etwa
    Dietmar> '1' => positiv; '0' => negativ), 'm' fuer ein Bit der
    Dietmar> Mantisse steht und 'e' ein Bit des Exponenten ist. Die
    Dietmar> Anzahl der jeweiligen Bits muesste auf ein 'float' auf
    Dietmar> einer Sparc-Station passen. Die Reihenfolge nicht
    Dietmar> unbedingt... (ich habe gerade nichts da, was die IEEE
    Dietmar> Definition enthaelt).

Von SunPro: ``FORTRAN77 Numerical Computation Guide'', Abschnitt IEEE
Arithmetik.

    Dietmar> In 'float.h' sind eine Reihe von Konstanten definiert,
    Dietmar> mittels denen man abschaetzen kann, wie ein 'float' (oder
    Dietmar> ein '[long] double') dargestellt ist.

Nach dem ANSI-C Standard sind das keine Konstanten, sondern rvalues
(werden zur Laufzeit berechnet).  Das hat schon einigen Leuten graue
Haare bereitet, denn theoretisch koennten sich diese jederzeit
aendern.



--
Achim Gratz

--+<[ It's the small pleasures that make life so miserable. ]>+--

E-Mail: gratz@ite.inf.tu-dresden.de
Phone:  +49 351 4575 - 325
Re: float
#1276
Author: Achim Gratz
Date: Mon, 15 Jan 1996 14:07
18 lines
1106 bytes
>>>>> "Tom" == Tom Wellige <picard@distel.robin.de> writes:

              
    Tom> Man moege mich korrigieren, wenn ich mich irren sollte.
              
Bitte.  Du brauchst fuer einen Exponentenbereich von 1e77 nicht 77
binaere Zahlen sondern 256 (77/log(2)) und ein Vorzeichenbit fehlt
Deiner Zahl wohl auch noch.



--
Achim Gratz

--+<[ It's the small pleasures that make life so miserable. ]>+--

E-Mail: gratz@ite.inf.tu-dresden.de
Phone:  +49 351 4575 - 325
Re: float
#1277
Author: Watson
Date: Mon, 15 Jan 1996 14:09
14 lines
1277 bytes
Tom Wellige wrote:
> Eine float-Zahl ist 4 Byte gross und umfasst den Zahlenbereich
> 3.4E-38 bis 3.4E38 . Da Manitsse und Exponent getrennt sind, ueberlege ich
> mir zuerst, wieviel Bits benoetigt werden, um den Exponenten darzustellen.
> Da 77 verschiedene Zahlen moeglich sind, werden 7 Bits fuer den
> Exponenten benoetigt. Danach bleiben noch 25 Bits fuer die Mantisse uebrig

Eine float-Zahl ist natuerlich sizeof(float) gross. Und wie bereits
verschiedentlich erwaehnt ist das Format auch nicht vorgeschrieben,
wenngleich auch viele C(!)-Compiler das gleiche benutzen. 
-- 
*	Greetinx from Watson (sayegh@fokus.gmd.de)
	http://www.fokus.gmd.de/ovma/employees/sayegh/entry.html
	signal(SIGSEGV,SIG_IGN);
Re: float
#1290
Author: Tom Wellige
Date: Mon, 15 Jan 1996 16:31
23 lines
1527 bytes
gratz wrote on 15.01.96 about
"Re: float":

> Bitte.  Du brauchst fuer einen Exponentenbereich von 1e77 nicht 77
> binaere Zahlen sondern 256 (77/log(2)) und ein Vorzeichenbit fehlt
> Deiner Zahl wohl auch noch.

Tja, so geht das, wenn man sich gewisse Sachen mal gerade eben ueberlegt und
nicht einfach nachschaut :-))

Kann vorkommen...


  See you, Tom.
--
 +--------------------------+---------------------------------------------+
 | Tom Wellige              | BBS DISTEL (Dieburg, Germany)               |
 | Haller Weg 64            |    PICARD@distel.robin.de                   |
 | 33617 Bielefeld, GERMANY | Dublin Institute of Technology (Ireland)    |
 | +49 521 152474           |    TWELLIGE@dit.ie                          |
 | ** PGP key on request ** |    http://147.252.133.152/people/twellige/  |
 +--------------------------+---------------------------------------------+
## CrossPoint v3.1 R ##
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads