void OnStart()
{
//--- DBL_MAX を Print() を使用して出力する。これは PrintFormat(%%.16G,DBL_MAX) と同等
Print("---- how DBL_MAX looks like -----");
Print("Print(DBL_MAX)=",DBL_MAX);
//--- DBL_MAX 数を PrintFormat() を使用して出力する
PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- エキスパート操作ログへ出力する
// Print(DBL_MAX)=1.797693134862316e+308
// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308
//--- float の出力され方を参照する
float c=(float)M_PI; // 明示的にターゲット型にキャストする必要がある
Print("c=",c, " Pi=",M_PI, " (float)M_PI=",(float)M_PI);
// c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159
//--- 実数型の算術演算で何が起こるかを表示する
double a=7,b=200;
Print("---- Before arithmetic operations");
Print("a=",a," b=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- a を b で割る( 7 / 200 )
a=a/b;
//--- B変数にて値を復元するエミュレートをする
b=7.0/a; // b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 が期待されるが、異なる
//--- b の新たに計算された値を出力する
Print("----- After arithmetic operations");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- エキスパート操作ログへ出力する
// Print(b)=200.0
// Print(DoubleToString(b,16))=199.9999999999999716 (b はすでに 200.0 と等しくない)
//--- 常に小さな値を作成 epsilon=1E-013
double epsilon=1e-13;
Print("---- Create a very small value");
Print("epsilon=",epsilon); // epsilon=1E-013 を取得
//--- b から epsilon を引き、値を再びエキスパート操作ログへ出力する
b=b-epsilon;
//--- 2 つの方法を使用する
Print("---- After subtracting epsilon from the b variable");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- エキスパート操作ログへ出力する
// Print(b)=199.9999999999999 ( epsilon を差し引いた後の b の値は 200 に丸めることが出来ない)
// Print(DoubleToString(b,16))=199.9999999999998578
// ( epsilon を差し引いた後の b の値は 200 に丸めることが出来ない)
}
|