On Mon, 23 Jun 2008 14:15:22 +0200, Pascal J. Bourguignon wrote:
> Selvam <> writes:
>
>> Hi All,
>>
>> I am getting exponent value when doing float arithmetic in C++. Instead
>> of that I need accurate value.
>>
>> float amount = 0.0f;
>> float x = 0.99999976f;
>> amount= 1.0f - x;
>>
>> I am getting amount as 2.3841858e-007 instead of 0.00000024
[...]
> The bug you made is here: float amount;
> ^^^^^ ^^^^^^
>
> Amounts ARE NOT floating point numbers. You should NEVER use float(-ing
> point) numbers in financial applications.
Where did the OP say "financial application"? There are amounts of other
stuff besides money, surely
Aside from which, I'm not convinced that's realistic advice (I once
programmed for a financial institution where we worked quite happily in
floating point - paying very careful attention to precision and rounding,
of course).
> If you want exact arithmetic, use integers (and rationals or fixed-point
> numbers). http://gmplib.org/
Maybe - but seeing as we don't know what the problem domain of the OP is,
this may not be the way to go.
>> Note : I am getting correct value in C#.Net but not in C++
>
> Only because C#{float} == C++{double}. Try:
>
> float weight = 0.0f;
> float x = 0.999999999999999976f;
> weight= 1.0f - x;
>
> in C#. (Notice how I changed the application domain, from amounts to
> weight, to make it a correct program).
You've changed the application domain? You must be psychic. Personally
I've no idea what the OP's application domain might be.
--
Lionel B