- ベストアンサー
単精度計算と倍精度計算
F(x)=(1-x・x)1/2乗において、xの値を0.9、0.99、…0.99999と変化させた場合の単精度計算と倍精度計算の結果を求めるプログラムを教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #include <math.h> int main(){ double dx; float fx; double tempd = 1.0f; float tempf = 1.0f; for(int i = 0;i < 5;i++){ tempd *= 0.1f; printf("x = %-5.5f\n",1.0f-tempd); dx = 1.0f - tempd; printf("double = %-15.15f\n",sqrt(1.0f-dx*dx)); tempf *= 0.1f; fx = 1.0f - tempf; printf("float = %-15.15f\n\n",sqrt(1.0f-fx*fx)); } return 0; } こういうこと?
その他の回答 (1)
- jacta
- ベストアンサー率26% (845/3158)
作成依頼目的のような気もしますが... 単精度、倍精度というのは、IEC 60559の単精度浮動小数点数と倍精度浮動小数点数のことでしょうか? その場合、使用している処理系の浮動小数点型は、それらの形式に対応しているのでしょうか?(そうでなければ、ソフト的にエミュレートする必要が生じます) C言語の場合、sqrtを使うと、その部分以降はdoubleになってしまいます。sqrtfは任意実装のため、処理系がサポートしているかどうかわかりません。C++では、(規格上は)sqrtがfloat用にも多重定義されているべきですが、実際にはそうなっていない処理系がほとんどです。この辺りはどうなっているのでしょうか? Cでは、float型の値を(いったんdoubleに変換せずに)直接出力させる手段を(標準の範囲では)持っていませんが、自作することを要求しているのでしょうか?