BUG in 'modf' function ????

From: Joe Spanicek <joe_at_resptk.bhp.com.au>
Date: Mon, 7 Apr 1997 10:18:27 +1000

Hi all,

Could someone confirm whether the following is a BUG
with the 'modf' function or me doing something wrong !!!

With the following bit of code:

-----------8<--------------8<----------------------
#include <stdio.h>
#include <math.h>

main() {
        int m = 1000;
        float value1 = 0.021;
        double value2 = 0.021;

        double x1, x2;
        double n1, n2;
        double y1, y2;

        x1 = (double)((double)value1 * (double)m);
        x2 = (double)((double)value2 * (double)m);

        y1 = modf(x1, &n1);
        y2 = modf(x2, &n2);

        printf("[float] x = %f n = %f y = %f\n", x1, n1, y1);
        printf("[double] x = %f n = %f y = %f\n", x2, n2, y2);
}
-----------8<--------------8<----------------------

I get the following output:


[float] x = 21.000000 n = 20.000000 y = 1.000000
[double] x = 21.000000 n = 21.000000 y = 0.000000


In the man page for 'modf' it states the following:

  The modf() and modff() functions split a floating-point number x into a
  fractional part f and an integer part i such that |f| < 1.0 and (f + i) =
  x. Both f and i have the same sign as x. The modf() and modff() functions
  return f and store i into the location pointed to by n.


This says that the |f| value should always be less than 1.0. As shown in
the line [float] it returns a value of 1.0 instead of 0.0.

Going by whats in the man page it looks like their is a BUG in the 'modf'
function. Or does this have to do with promoting 'value1' from a float to
a double ???

In any case the 'modf' function looks like it returns '1.0' or is this
really '0.99999999999999999' and the printf's '%f' prints this as a 1.0 ??

Any thoughts on this is appreciated.

Thanks

Joe Spanicek
joe_at_resptk.bhp.com.au
Received on Mon Apr 07 1997 - 02:32:14 NZST

This archive was generated by hypermail 2.4.0 : Wed Nov 08 2023 - 11:53:36 NZDT