フェルマーの最終定理の「反例」(Perl, awk, JavaScript, PHP等)

(プログラミングに興味のない方は表計算ソフト編へ)

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)を参照してください。

フェルマーの大定理が解けた!―オイラーからワイルズの証明まで (ブルーバックス)フェルマーの最終定理について数学者が書いた読み物がほしい方には、足立恒雄『フェルマーの大定理が解けた!―オイラーからワイルズの証明まで』がおすすめです。

トラックバック(0)

このブログ記事を参照しているブログ一覧: フェルマーの最終定理の「反例」(Perl, awk, JavaScript, PHP等)

このブログ記事に対するトラックバックURL: http://www.unfindable.net/~yabuki/mt/mt-tb.cgi/1019

コメントする


画像の中に見える文字を入力してください。

portrait

 

Translation

著書

schedule

 

2008年10月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

関連商品(Amazon)

関連サイト(Google)

アーカイブ

twitter

  •