--- maxreason <[EMAIL PROTECTED]> wrote:
> 
> 1:  From an original software package I wrote long ago in
> another language, I could declare the value of an f64 AKA
> "double" precision floating point constant with:
> 
>   $$PI = 0d400921FB54442D18
> 
> where the "0d" prefix says "this is a double precision value
> input in hexadecimal".  I have about 200 of these, because I was
> able to compute bit-accurate values for many fundamental math
> constants, and found that assigning ascii-decimal values to the
> constant often led to 2~5 bit errors (in the ascii->double code).
> 
> That's very nice, but I assume C simply lacks such a nice feature.
> So, my question is - what alternatives can you come up with?
> 
> The crappy "solution" in the windoze version of my 3D engine
> is the following:
> 
> const s64 MATH_bit_PI = 0x400921FB54442D18;
> const f64 MATH_PI = (*(f64*)&MATH_bit_PI);
> 
> Though this is truly revolting, it works on visual studio.
> Yes, I have typedefs that define s64 and f64 from the long
> conventional type names.
> 

  Read:
/usr/include/math.h
/usr/include/bits/huge_valf.h

  A solution:
#include <stdint.h>

typedef union {
        int64_t i;
        double d;
} f64;

const f64 MATH_PI = {0x400921FB54442D18LL};

  Any doubt left?



      Abra sua conta no Yahoo! Mail, o único sem limite de espaço para 
armazenamento!
http://br.mail.yahoo.com/

Reply via email to