
前提・実現したいこと
学習のためsqrt関数を使って平方根を求めています
sqrt関数は引数と戻り値がdouble型と調べると書いてあります。
また、sqrtf関数は引数と戻り値がfloat型と調べると書いてあります。
しかし、float型の引数、戻り値でsqrt関数を使っても出力結果が同じでした。(一つ目のコード)
また、double型の引数、戻り値でsqrtf関数を使い同じ処理を行いました。出力結果が同じです。(二つ目のコード)
なぜこのようなことが起きるのでしょうか・・・
一つ目のコードと結果
C
1 1 #include <stdio.h> 2 2 #include <math.h> 3 3 #define FLOATNUM 2.1 4 4 #define DOUBLENUM 2.1 5 5 6 6 int main(){ 7 7 float f = FLOATNUM; 8 8 double d = DOUBLENUM; 9 9 float fRoot; 10 10 double dRoot; 11 11 12 12 13 13 fRoot = sqrt( f ); 14 14 dRoot = sqrt ( d ); 15 15 16 16 17 17 printf("f = %f\n", f); 18 18 printf("fRoot = %f\n", fRoot); 19 19 printf("d = %f\n", d); 20 20 printf("dRoot = %f\n", dRoot); 21 21 22 22 } 23
f = 2.100000 fRoot = 1.449138 d = 2.100000 dRoot = 1.449138
二つ目のコード
C
1 1 #include <stdio.h> 2 2 #include <math.h> 3 3 #define FLOATNUM 2.1 4 4 #define DOUBLENUM 2.1 5 5 6 6 int main(){ 7 7 float f = FLOATNUM; 8 8 double d = DOUBLENUM; 9 9 float fRoot; 10 10 double dRoot; 11 11 12 12 13 13 fRoot = sqrtf( f ); 14 14 dRoot = sqrtf ( d ); 15 15 16 16 17 17 printf("f = %f\n", f); 18 18 printf("fRoot = %f\n", fRoot); 19 19 printf("d = %f\n", d); 20 20 printf("dRoot = %f\n", dRoot); 21 21 22 22 } 23
f = 2.100000 fRoot = 1.449138 d = 2.100000 dRoot = 1.449138
補足情報(FW/ツールのバージョンなど)
gcc でコンパイルしました。
Linuxです。ideone.comでも同じ結果だったのでコンパイルやOSの問題ではないのかと思います。

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/09/21 09:10