2009-05-04 02:46:13 -04:00
|
|
|
namespace factor
|
|
|
|
{
|
|
|
|
|
2009-05-02 05:04:19 -04:00
|
|
|
/* Some functions for converting floating point numbers to binary
|
|
|
|
representations and vice versa */
|
|
|
|
|
2009-05-04 05:50:24 -04:00
|
|
|
union double_bits_pun {
|
2009-05-02 05:04:19 -04:00
|
|
|
double x;
|
|
|
|
u64 y;
|
2009-05-04 05:50:24 -04:00
|
|
|
};
|
2009-05-02 05:04:19 -04:00
|
|
|
|
2009-05-04 02:00:30 -04:00
|
|
|
inline static u64 double_bits(double x)
|
2009-05-02 05:04:19 -04:00
|
|
|
{
|
2009-05-04 05:50:24 -04:00
|
|
|
double_bits_pun b;
|
2009-05-02 05:04:19 -04:00
|
|
|
b.x = x;
|
|
|
|
return b.y;
|
|
|
|
}
|
|
|
|
|
2009-05-04 02:00:30 -04:00
|
|
|
inline static double bits_double(u64 y)
|
2009-05-02 05:04:19 -04:00
|
|
|
{
|
2009-05-04 05:50:24 -04:00
|
|
|
double_bits_pun b;
|
2009-05-02 05:04:19 -04:00
|
|
|
b.y = y;
|
|
|
|
return b.x;
|
|
|
|
}
|
|
|
|
|
2009-05-04 05:50:24 -04:00
|
|
|
union float_bits_pun {
|
2009-05-02 05:04:19 -04:00
|
|
|
float x;
|
|
|
|
u32 y;
|
2009-05-04 05:50:24 -04:00
|
|
|
};
|
2009-05-02 05:04:19 -04:00
|
|
|
|
2009-05-04 02:00:30 -04:00
|
|
|
inline static u32 float_bits(float x)
|
2009-05-02 05:04:19 -04:00
|
|
|
{
|
2009-05-04 05:50:24 -04:00
|
|
|
float_bits_pun b;
|
2009-05-02 05:04:19 -04:00
|
|
|
b.x = x;
|
|
|
|
return b.y;
|
|
|
|
}
|
|
|
|
|
2009-05-04 02:00:30 -04:00
|
|
|
inline static float bits_float(u32 y)
|
2009-05-02 05:04:19 -04:00
|
|
|
{
|
2009-05-04 05:50:24 -04:00
|
|
|
float_bits_pun b;
|
2009-05-02 05:04:19 -04:00
|
|
|
b.y = y;
|
|
|
|
return b.x;
|
|
|
|
}
|
2009-05-04 02:46:13 -04:00
|
|
|
|
|
|
|
}
|