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 *
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
man ページをチェックして、どこで問題が発生したかを確認してください。