如何正确使用modf

时间:2013-10-08 21:29:52

标签: c

我正在尝试使用modf函数,但它无法正常工作,它不会对变量进行必要的部分

float intp;
float fracp;
float x = 3.14;
fracp = modf(x,&intp);
printf("%f %f\n", intp,fracp);

会给我0.00000 0.14000 我做错了什么?

1 个答案:

答案 0 :(得分:2)

您将&intpfloat *)传递给需要double *的参数。这会导致未定义的行为。您需要使用modff

fracp = modff(x,&intp);

或者intp改为double

double intp;

你会没事的。

您应该在编译器中打开更多警告。例如,即使没有特殊标志,clang也会给出:

example.c:9:20: warning: incompatible pointer types passing 'float *' to
      parameter of type 'double *' [-Wincompatible-pointer-types]
    fracp = modf(x,&intp);
                   ^~~~~
/usr/include/math.h:400:36: note: passing argument to parameter here
extern double modf(double, double *);
                                   ^
1 warning generated.

为您的计划。

查看modf and modff man page,看看你哪里出错了。