これは本当に奇妙です。なぜなら、C は float を double としてスタックに渡します。ObjC メソッドは C 関数に変換されるため、float パラメーターを使用しても float は double に拡張されます。そうは言っても、コンパイラが17.0をfloatに入れ、それをdoubleに拡張している可能性があります.iOSはその正確な2進数を調べています(比較しています)が、doubleを直接渡すと、わずかに異なります分数フォントになります。
だから私は興味を持って、テストを試すことにしました:
- (void)test:(float)foo
{
union {
float f;
uint32_t u;
} u;
u.f = foo;
NSLog(@"foo=%.15f hex=%x", u.f, u.u);
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self test:17.0];
[self test:17.0f];
出力:
2012-09-13 16:02:34.035 Searcher[73472:f803] foo=17.000000000000000 hex=41880000
2012-09-13 16:02:34.036 Searcher[73472:f803] foo=17.000000000000000 hex=41880000
数字はまったく同じで、ヘックスと同じでした。コードのどこかで何かが明らかに間違っています。