|
FAST Protocol
< Previous Next >
Re: Representing a double as a Fast scaled decimal
Dimitry London / Morgan Stanley <> 9 Oct 2008 11:04PM ETDaniel, thanks very much, this approach looks very promising. I will run performance tests in the next few days.
Dimitry
> Dimity, There are two ways to look at this problem. If you know ahead of
> time that you are going to always use a fixed number of decimal
> precision (again, let's say your business rules require a precision of 4
> decimal points), and you have already either rounded your float to those
> 4 points of precision, or truncation is okay for your application, then
> the conversion is simple:
>
> float x = 123.4500 int64_t mantissa = (int64_t)(x * 10000); int32_t
> exponent = 4;
>
>
> The more complicated case is when you are trying to generically convert
> a floating point number to a FAST scaled decimal with
> a.) not losing any precision, and
> b.) optimizing the exponent as to keep the mantissa as small as
> possible.
>
> For this, take a look at modf() in the standard C library. It breaks a
> float into the whole and fractional parts. You can then cast or convert
> the float whole and fractional parts to integers. Next, you would remove
> any unnecessary precision from the fractional integer by using a mod and
> divide by 10 while there are trailing zeros left.
>
> Finally, to create the FAST scaled decimal mantissa, you must determine
> the FAST exponent by inspecting the size of the fractional integer, and
> then adjust the whole integer by that factor, and add back the
> fractional part.
>
> I am working on C/C++ an example for you...
>
> /Daniel
Re: Representing a double as a Fast scaled decimal Dimitry London / Morgan Stanley 9 Oct 2008 11:04PM ET
|