473,387 Members | 1,745 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,387 software developers and data experts.

problem with fmod()

Hi,

I have a problem with the function fmod.

Why is fmod(5.7, 0.1) = 0.1 ?? Why is it not 0?

tia bummerland
Nov 29 '07 #1
7 2564
bu********@gmail.com wrote:
Hi,

I have a problem with the function fmod.

Why is fmod(5.7, 0.1) = 0.1 ?? Why is it not 0?

tia bummerland
Hi,

Read the usercontributed notes on www.php.net for that function.
http://nl3.php.net/manual/en/function.fmod.php

It seems to be broken.
Also you'll find a few replacing algoritms.

Regards,
Erwin Moller
Nov 29 '07 #2
On 29 Nov., 13:18, Erwin Moller
<Since_humans_read_this_I_am_spammed_too_m...@spam yourself.comwrote:
bummerl...@gmail.com wrote:
Hi,
I have a problem with the function fmod.
Why is fmod(5.7, 0.1) = 0.1 ?? Why is it not 0?
tia bummerland

Hi,

Read the usercontributed notes onwww.php.netfor that function.http://nl3.php.net/manual/en/function.fmod.php

It seems to be broken.
Also you'll find a few replacing algoritms.

Regards,
Erwin Moller
Thanks.
Nov 29 '07 #3
bu********@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.
--
Tim Roberts, ti**@probo.com
Providenza & Boekelheide, Inc.
Nov 30 '07 #4
Tim Roberts wrote:
bu********@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
Nov 30 '07 #5
Erwin Moller wrote:
Tim Roberts wrote:
>bu********@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?

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
js*******@attglobal.net
==================

Nov 30 '07 #6
Jerry Stuckle wrote:
Erwin Moller wrote:
>Tim Roberts wrote:
>>bu********@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
Nov 30 '07 #7
Erwin Moller wrote:
Jerry Stuckle wrote:
>Erwin Moller wrote:
>>Tim Roberts wrote:
bu********@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.
Sure. But that's how floating point calculations work. How would the
computer know the answer wasn't actually 5.99999999? It's outside the
available precision. And the same problem occurs in C/C++'s fmod()
implementation.
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).
Don't know. I never found much good use for it anyway. Didn't in
C/C++, either.
So, as far as I can see:
1) PHP shouldn't offer fmod() as it is now.
or
I wouldn't miss it.
2) PHP should offer a fmod() that uses some other math behind the scenes.
Maybe with old fixed-point representation?
Not sure.
Very difficult to do. The first problem is both 5.7 and 0.1 cannot be
expressed in floating point. So to do it with accuracy, they would have
to get rid of the IEEE implementation of floating point altogether and
go do packed decimal or similar.

And that will make all calculations much more difficult, because
processors will handle the IEEE format transparently, but (other than
IBM mainframes) won't do packed decimal. So instead of one instruction
to do floating point add/subtract/multiply/divide, they would have to
have a whole routine to handle it.
(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
Nope, no libs to handle it. It's a restriction of floating point.

Just like in decimal - 10 / 3 * 3 = 9.999999999, and not 10.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
js*******@attglobal.net
==================

Nov 30 '07 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
by: Zunbeltz Izaola | last post by:
Hi, I have a problem with % operation. It returns a incorrect value in this case: >>> -2.77555756156e-17%1 1.0 where the returned value should be -2.77555756156e-17.
1
by: Tian | last post by:
I am trying to use pyfmod in python to manipulate sound. i have installed pyfmod, ctype, numarray (if they are necessary), i also copied fmod.dll to python/DLLs as well as windows/system32, but...
8
by: seia0106 | last post by:
Hello, I have a C++ program , which has following two lines of code z=atan2(x,y); z=(float)(fmod(2*pi+z, 2*pi); The comments written by the other programmer says that second line is used to...
6
by: stau | last post by:
Hi! I'm reading a C book, and it says that fmod() returns the remainder of the exact division of it's arguments. Well, in a exact division, the remainder shall always be 0 (zero), so this don't...
1
by: Joannes Vermorel | last post by:
I am currently trying to port a small open source scientfic library written in C++ to .Net. The code (including the VS solution) could be found at http://www.vermorel.com/opensource/selfscaling.zip...
2
by: Gintautas | last post by:
I'm trying to play a part of wav file. FSOUND_Sample_Load (0,"T01.wav",FSOUND_NORMAL, 0,0); plays all file FSOUND_Sample_Load (0,"T01.wav",FSOUND_NORMAL, 0,90000); plays file until 90000 sample...
17
by: joseph.p.doyle | last post by:
This code, compiled with visual studio .NET 2003, double a = 95.022, b = 0.01; printf ("%lf - floor(%lf / %lf) * %lf = %.17lf\n", a, a, b, b, a - floor(a / b) * b); a = 95.021, b = 0.01;...
14
by: Aaron Gray | last post by:
Does anyone have a good fmod() function written in Javascript ? Many thanks in advance, Aaron
17
by: Jonathan Pritchard | last post by:
I know this is a simple problem, but I've just included this in the title because it explains what my program tries to do. The following does not work, it for someone reason does not want to...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
0
by: ryjfgjl | last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.