floatとdoubleで正しく処理が行われているかテストしてみました。
プログラムは、だいたいこんな感じにしました。
{ double d1 = M_PI; NSNumber *num1 = @(d1); // double変数をNSNumberに int ri= [num1 intValue]; // intで取得 float rf = [num1 floatValue]; // floatで取得 double rd = [num1 doubleValue]; // doubleで取得 NSLog(@"NSNumber = %@",num1); NSLog(@"int = %d, float = %.20f, double = %.20f",ri,rf,rd); } { float f1 = M_PI; NSNumber *num1 = @(f1); // float変数をNSNumberに int ri= [num1 intValue]; float rf = [num1 floatValue]; double rd = [num1 doubleValue]; NSLog(@"NSNumber = %@",num1); NSLog(@"int = %d, float = %.20f, double = %.20f",ri,rf,rd); }
M_PIはmath.hに以下のように定義されています。
#define M_PI 3.14159265358979323846264338327950288
結果は以下のように出力されて、floatとdoubleでちゃんと処理されているようでした。
@()にdouble型の変数を挟んだ時の方が、NSNumberでも精度が高く保存されているのが分かります。
NSNumber = 3.141592653589793 int = 3, float = 3.14159274101257324219, double = 3.14159265358979311600 NSNumber = 3.141593 int = 3, float = 3.14159274101257324219, double = 3.14159274101257324219あたりまえといっちゃ、あたりまえなんですが、こういうのチェックしておかないと気持ち悪いですよね?
0 件のコメント:
コメントを投稿