むかしむかし、王子の命を救った賢い召使いがいました。 王様は、召使いが望むものなら何でも報酬として与えると約束しました。 王様がチェスを愛していることを知っていた召使いは、小麦の粒がほしいと王様に伝えました。 チェス盤の最初のマスに1粒、次のマスからはマスが進むごとに粒の数が2倍になるように、と。
チェス盤の上にある小麦の粒の数を計算しましょう。
チェス盤には64のマスがあります。 1マス目には1粒、2マス目には2粒、3マス目には4粒、というように、マスが進むごとに2倍になっていきます。
次のものを計算するコードを書きましょう。
Euphoriaでは、atomはあらゆる種類の数値を保持できます。サブタイプのintegerは、整数を表すためのものです。
C言語に似た言語では、符号なしの64ビット整数を返すことでこの演習を解くことができます。
ただし、Euphoriaの整数は符号付きで、マシンワードよりも1ビット小さいため、この演習には小さすぎます。一方、atomは必要な64ビットの精度でより大きな整数を保持できます。
Euphoriaには32ビット版があり、今も存在しています。64ビット版が利用できないときにレガシーアプリケーションがビルド済みの32ビットdll/soを使い続けられるようにするため、あるいはそのようなもの用のラッパーがハードコードされた32ビットのオフセットで埋め尽くされているためです。 このバージョンは、この課題を解くにはまったく不十分です。そのバージョンのatomは53ビットの精度しか持たないからです。 ローカルでこの演習を解くのに苦労しているなら、64ビット版のEuphoriaを使っているか確認してください。