|
Posted by Erwin Moller on 11/30/07 14:28
Jerry Stuckle wrote:
> Erwin Moller wrote:
>> Tim Roberts wrote:
>>> bummerland@gmail.com wrote:
>>>> I have a problem with the function fmod.
>>>>
>>>> Why is fmod(5.7, 0.1) = 0.1 ?? Why is it not 0?
>>>
>>> Because floating point arithmetic is not exact. The number "5.7"
>>> cannot be
>>> represented exactly in binary. So, it's quite likely that you are
>>> really
>>> computing something like fmod(5.69999999999999, 0.1), and that result
>>> would
>>> be 0.09999999999999, which will print as 0.1.
>>>
>>> It's not the function that is broken, I am afraid. It is your
>>> expectations.
>>
>> Hi Tim,
>>
>> The same thought crossed my mind.
>> But what is the use of fmod if it uses unexcact representations
>> internally?
>> I mean, if you offer such a function, I would expect it does what it
>> claims to do (eg in their examples).
>> And thus NOT use 'normal' floating points representation, but
>> something that respects 6.0 as 6.0 and not 5.9999999999999.
>> (I must admit I don't know HOW, but I am sure some smart guy can
>> figure something out.)
>>
>> Wouldn't it be better to dump fmod al together?
>> I mean, what to expect from the function?
>> What is your opinion?
>>
>> Regards,
>> Erwin Moller
>>
>
> Erwin,
>
> It's a limitation of all floating point calculations. And how can you
> correct 5.99999999999 to 6.0 and not be sure the former was correct?
Hi Jerry,
I am aware of the the problems concerning internal representation of
floating point numbers.
If I say to YOU 6.0 you know I don't say 5.999999999, right?
But if you are a computer you represent 6.0 to something that could
resemble 5.99999999 more than 6.0.
I just wonder why PHP offers fmod() while we all know it won't work in
many/most cases as expected because of internal floating point storage
(and thus changing values).
So, as far as I can see:
1) PHP shouldn't offer fmod() as it is now.
or
2) PHP should offer a fmod() that uses some other math behind the scenes.
Maybe with old fixed-point representation?
Not sure.
(Erwin is not a mathematician)
There must be libs that address this issue.
My main problem with fmod() is that it seems quite useless in its
current form.
Regards,
Erwin Moller
[Back to original message]
|