CGFloatのMAX値で遊んでみると...【Objective-C】

公開: 2015-06-11 21:31
更新: 2016-04-29 06:03

どうも皆様こんにちは。

先日突進してくる巨大なウサギをお腹で受け止めつつ、ひたすら殴る夢を見ました。あっきぃです。


さてさて
暇なのでObjective-CのCGFloatのMAX値で遊んでみます。



とりあえず
64bitなのか32bitなのか意味もわからず調べて置きます。

if(__LP64__) {
        NSLog(@"You're running in 64 bit.");
} else {
        NSLog(@"You're running in 32 bit.");
}
You're running in 64 bit.

今流行りの64bitでした。




1.MAX値はCGFLOAT_MAXで取得できる

一番大きな値を入れてみます。

CGFloat a = CGFLOAT_MAX;
NSLog(@"%lf", a);

結果はこんな感じ

179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000

読めない。星の数より多そう。




2.CGFLOAT_MAXとの計算

さてここでクイズです。

次の1〜5の計算の答えはどうなるでしょうか?

CGFloat a = CGFLOAT_MAX;
NSLog(@"1: %lf", a+0);
NSLog(@"2: %lf", a+1);
NSLog(@"3: %lf", a-1);
NSLog(@"4: %lf", a+a);
NSLog(@"5: %lf", a*10);



結果は...




(※179...368.000000はCGFLOAT_MAXと表示しています。長いから。)
1: CGFLOAT_MAX
2: CGFLOAT_MAX
3: CGFLOAT_MAX
4: inf
5: inf

こうなります。あっきぃ驚きです。




3.「a+1 == a-1」が成り立ってしまう

つまり、

次の式が成り立ちます。

CGFloat a = CGFLOAT_MAX;
if(a + 1 == a - 1) {
        NSLog(@"a+1はa-1なのだ。");
}
a+1はa-1なのだ。

数学とは違うんだなと感動しますね。




4.Infinityとの計算

Infinity。無限大のことです。

さぁ次の計算はどうなるでしょうか。

CGFloat a = CGFLOAT_MAX * 10; //inf
NSLog(@"1: %lf", a+a);
NSLog(@"2: %lf", a-a);
NSLog(@"3: %lf", a/2);
NSLog(@"4: %lf", a*0);
NSLog(@"5: %d", a == a);
NSLog(@"6: %d", a-a == a-a);



結果は...




1: inf
2: nan
3: inf
4: nan
5: 1
6: 0

ほうほう。なるほど。




5.「a*0 != a-a」が成り立つ

次の式が成り立ちます。

成り立つというかTRUEになるって言った方がいいカモ。

CGFloat a = CGFLOAT_MAX * 10;
if(a * 0 != a - a) {
        NSLog(@"a*0はa-aではないのだ。");
}
a*0はa-aではないのだ。

ふむふむ。面白い。




とりあえずこんなもんでいかがでしょう。

例えば「a+b == c+d」みたいな判定式があって、aとcはユーザーが好きなように入力出来るのならばaとcにCGFLOAT_MAXを入れればこの判定を通ることが可能なわけですね。



この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。