無限に大きい数として無限大という言葉をよく口にするが
そもそも「無限大」は概念であって数ではない。
もし∞という何より最も大きい数が存在したとすると、
∞ + 1 は∞より + 1 大きいのであるから、∞が最も大きい数である、という定義に反する。
よって最初の仮定、「最も大きい数∞が存在する」に矛盾し、これは誤りである。
( 背理法による証明 )
このように感覚的ではなく論理的に証明することを日頃から行いたいものである。
ところが浮動小数点表示 ( float
) には無限大としての定義も認めているOSプラットフォームもある。
さらに isinf
という無限大かどうかを調べる関数が一般的に用意されているが IBM System i にはない。
IBM System i では代わりに INFINITY
という∞を意味する定数が用意されている。
0001.00 #include <stdio.h> 0002.00 #include <stdlib.h> 0003.00 #include <string.h> 0004.00 #include <math.h> 0005.00 0006.00 #define TRUE 0 0007.00 #define FALSE -1 0008.00 0009.00 void main(void){ 0010.00 double x = 1.5 / 0; 0011.00 0012.00 printf("** TESTINF2: 無限大のテスト **\n"); 0013.00 getchar(); 0014.00 0015.00 if(x == INFINITY){ 0016.00 printf("x は∞です。\n"); 0017.00 } 0018.00 else printf("x は∞ではありません。\n"); 0019.00 getchar(); 0020.00 }
このプログラム TESTINF2
を実行すると
IBM System i では「0による除算を行おうとした」とのエラーで終了してしまうが、
他のプラットフォームでは「 x は∞です。」とのメッセージが表示されて正常に終了する場合もある。
しかしこれは正しくない。
任意の数を 0 で割り算すると答えは∞とはならないのである。
仮に 1.5 / 0 = X となる数 x が存在したとする。
1.5 / 0 = x という式は 1.5 = x * 0 と恒等的に置き換えることができる。
次に x * 0 = 0 であるから、この式は 1.5 = 0 となり、矛盾である。
従って最初の 1.5 / 0 = x となる数 x は存在しない。つまり、この式は不能である、と
高校生の時に習っていたはずである。
余談であるが数直線上で考えると例えば、整数、自然数、有理数、無理数の数は各々無限であるが
各々の無限にも種類があって、例えば有理数より無理数の無限のほうが多い、という話がある。
これは稠密度の問題であって個数の大小は存在しない。
読者はそれを簡単に証明して欲しい。