(プログラミングに興味のない方は表計算ソフト編へ)
a=5999856, b=99992800, c=100000000としたときに、a^3 + b^3 = c^3になるような言語があります。codepadでちょっと試してみましょう。
codepadではサポートされていませんが、awkもそういう言語の1つです。
$ awk 'BEGIN{a=5999856; b=99992800; c=100000000; if(a**3+b**3==c**3) print "True!";}'
JavaScriptもそうですね。a*a*a+b*b*b==c*c*cの評価結果を表示
これらの言語は、C言語やbash, zshと違って、大きな整数は自動的に64ビットの浮動小数点数として処理されます。64ビットの浮動小数点数の仮数部は52ビットしかないため、たとえば2^53 (=9007199254740992) と2^53+1を区別することができません。次のコマンドを実行すると、「True!」と表示されます。
$ awk 'BEGIN{a=9007199254740992; if(a+1==a) print "True!";}'
ですから、扱う数が2^53以上になるようにして適当に探せば、フェルマーの最終定理の「反例」を簡単に見つけることができます。それらしく見えなくてもいいのであれば、a=1, b=208064, c=208064などでもいいでしょう(208063^3 < 2^53 < 208064^3)。
RubyやPython、Common Lispをこの方法でだますことはできません(整数を3.0や5999856.0などと書けば「aの3乗+bの3乗-cの3乗」は0になりますが、これで人をだまそうとしたら怒られるでしょう)。
浮動小数点数について知りたい場合には、What Every Computer Scientist Should Know About Floating-Point Arithmetic (David Goldberg)を参照してください。
フェルマーの最終定理について数学者が書いた読み物がほしい方には、足立恒雄『フェルマーの大定理が解けた!―オイラーからワイルズの証明まで』がおすすめです。
コメントする