· Web development

fmod() in PHP is the worst !”#¤%&/()= function ever!

I hate floating point artithmetic and I really hate fmod() in PHP. It’s useless.

fmod — Returns the floating point remainder (modulo) of the division of the arguments

If you calculate 36 modulo 7.2? What do you get? Zero, yes. 7.2*5=36. No remainder!

What if you use fmod in PHP?

$ php -r 'echo fmod(36,7.2);'
7.2

WTF? Excuse me? Is that the result from IEEE 754 hell, a parallel universe, or what?

Now I’m betting on the function below. I hope it won’t let me down.

function modulo($n,$b) { return $n-$b*floor($n/$b); }

Tags: PHP

2 comments

Comments are archived from the original blog and closed.

  1. Carl Ådahl ·

    Could it be possible that ‘echo’ is truncating the value? E.g. printing 7.199999999999 as 7.2.

    Then you have the problem of exact representability of course. Did you try this in C/C#/Java?

  2. David ·

    @Carl

    Indeed:

    $ php -d precision=40 -r ‘echo fmod(36,7.2);’
    7.199999999999999289457264239899814128876

    So, fmod() actually thinks that 36 is 4*7.2 + the above?