我正在尝试使用 modf 函数,但它不能正常工作,它没有对变量的组成部分进行签名
float intp;
float fracp;
float x = 3.14;
fracp = modf(x,&intp);
printf("%f %f\n", intp,fracp);
会给我0.00000 0.14000
我做错了什么?
我正在尝试使用 modf 函数,但它不能正常工作,它没有对变量的组成部分进行签名
float intp;
float fracp;
float x = 3.14;
fracp = modf(x,&intp);
printf("%f %f\n", intp,fracp);
会给我0.00000 0.14000
我做错了什么?
您将&intp
(a float *
) 传递给需要 a 的参数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
和modff
手册页,看看你哪里出错了。