www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/02/03/12:11:11

Xref: news2.mv.net comp.os.msdos.djgpp:758
From: Erik Max Francis <max AT alcyone DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: Re: binary representation of floats
Date: Fri, 02 Feb 1996 12:29:56 -0800
Organization: &tSftDotIotE
Lines: 26
Message-ID: <31127444.7DE259CD@alcyone.com>
References: <DM34r9 DOT HtI AT granite DOT mv DOT net>
NNTP-Posting-Host: newton.alcyone.com
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Eli Zaretskii wrote:

> Every book on Intel CPUs describes this.  To get a bit pattern of any
> float or double variable, cast them to an unsigned int and use the usual
> bit operations.  (In the case of double, you'll have to use long long.)

Correct me if I'm mistaken, Eli, but this won't work.  Casting a float or
double to an integer type will truncate the value so that it is the nearest
integer less than or equal to the float/double value.  That is, (unsigned int)
2.1f yields 2, not the binary representation of 2.1 in the machine's float.

What you have to do is cast a _pointer_ to that float or integer to a pointer
of an integral type of the same size.  That is, instead of

    (unsigned int) f, 

you need

    *(unsigned int *) &f.

-- 
Erik Max Francis, &tSftDotIotE. && max AT alcyone DOT darkside DOT com || max AT alcyone DOT com
San Jose, California, U.S.A. && 37 20 07 N 121 53 38 W && the 4th R is respect
H.3`S,3,P,3$S,#$Q,C`Q,3,P,3$S,#$Q,3`Q,3,P,C$Q,#(Q.#`-"C`- && 1love && folasade
Omnia quia sunt, lumina sunt. && GIGO Omega Psi && http://www.alcyone.com/max/
"Out from his breast/his soul went to seek/the doom of the just." -- _Beowulf_

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019