大きな整数の計算N88-BAISCで2^64の計算ハノイの塔の話をしたときに64枚のときの手数を計算しようという生徒がいて、電卓でなんか計算できる数でないと忠告したら、筆算でやって持ってきました。64枚はゲームのストーリーの中の移動が終わると世界も終わりになるという数です。今でこそウェブページで検索すると情報がたくさんでてきますが、1988年のお話。当時のPCはBASICで整数は最大で2バイト。16ビットですから符号なしで使っても2の16乗-1、普通の計算では符号付きですから15乗-1までしか計算できないわけです。浮動小数点数を使って1.84467e+19では筆算を確認することはできません。そこで、配列を使って10進のレジスタを作って計算しようということにしたのです。n枚のハノイの塔の移動はn-1枚の移動をしておいて最も下の1枚を動かし、再度n-1まいをその上に移動するのですから、レジスタの足し算を用意すればいいわけです。一つ必要な機能は配列を一つの十進数として表示する部分です。サブルーチンとして繰り返し呼び出すことにすればよいわけです。動かすための改変例で紹介しました。答えは18446744073709551615になります。前の話の生徒の計算は途中で一箇所間違えていてちょっと残念な結果でした。プログラムリストによりますと、1990年に2の累乗を計算する部分を追加しています。2nは2倍を繰り返すことですから、つまりは同じものを足すことを繰り返すことでできます。累乗と言いながら足し算で済んでしまいます。ハノイのプログラムのサブルーチンを再利用できるわけです。print(2**64)としただけで、正しい結果が出てきます。FORTRANやBASICの時代は、プログラミング言語の学習は変数の型と使用するバイト数を知るところから始まりました。pythonでは変数宣言をしませんから意識したことはありませんでした。2^64で計算できてしまいます。十進BASICでも10進1000桁モードにすればできます。十進BASICは演算に十進法を用いて我々の誤差に対する感覚に違和感のない計算ができることを売りにしたいましたが、昔から桁数の多い計算も簡単にできるようになっていました。ちなみに、二進で計算するから不正確になるという人がいますが、ちょっと短絡すぎるでしょう。0.1や0.2など十進で小数点以下ひと桁で書ける数は0.5以外二進では循環小数となるのは事実です。pythonやbwBASIC、十進BASICでどのような計算方法で出しているのかは、もう少し調べたいと考えています。javaではjavaのプリミティブ整数型はint4バイト、long8バイトです。符号付きですから、intで-2147483648から2147483647まで。longで-9223372036854775808から9223372036854775807まで扱えます。longは8バイトということは64ビット。負数があるので2の63乗-1が正の整数の最大値です。2の64乗は計算できません。javaにはjava.math.BigIntegerというクラスがあります。いうのがありますから、byteの配列を使って表現しているのでしょう。十進で計算するjava.math.BigDecimalというクラスもあります。プログラミング言語は思ったよりも進んでいました。ソートまで自分で書かなければならなかった時代からやっていますので、知らないでいることも多いのです。整数の扱える範囲をすぐに調べられないのはちょっと困ります。infbwbasicでは整数のまま21023まで計算し続けます。inf2^1023までは整数で計算します。python3での計算と同じようです。bwbasicの不具合??ただし、2^1023と2^1023-1は同じになります。普通にintではないようです。89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608累乗指数を減らしてテストすると、-1が計算結果に影響するのは254あたりからでした。18014398509481976丸めが影響しているようにも見えます。python3ではbwbasicが怪しい結果なので、pythonで検証です。89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068607安達順一(2018-09-13)https://dabiyone.com/。