2018年2月23日金曜日

Scratchでプログラミング その18 大きな数字の計算(Inifinity)

Scratchの使い方解説です、今回の難易度はEasy
この記事だけで内容が完結しています。

記事をまとめたページはこちら。


Scratchでの大きな数値の扱いについて調べてみました。

2×2=4
4×4=16
16×16=256
・・・
と繰り返すと、数字は段々と大きな数字になっていきます。
電卓で言うと「2××」って入れた状態かな。

これをScratchで計算し続けるとどうなるのか調べてみました。

変数valanswerを用意して
初期値としてval = 2 を指定しいます。

そのあと、15回計算を繰り返しています。
15回という数字には意味はありません。

繰り返しの中で、
answerval × val の結果を代入して
その結果を表示しています。
最後に変数val にanswerの結果(val×val)を代入します。
として繰り返すだけです。

このときの計算結果を表示してみます。



このように計算がだんだんと進んでいきます。


最終的に1行では計算が表示できなくなって、計算結果にInfinityと表示されます。
本題ではないのですが、計算式の掛け算が変なものに変わっているのは大きな数値の表し方です。

その状態で、さらに計算を続けると、図のようにInfinityのみの計算結果に・・・


このように数字は最終的に「Infinity」になります。

一度「Inifinity」になった変数は、割り算など計算をした結果はずっと「Infinity」のままです。

ただし-1×Inifinity-Infinityとなり、正の数と負の数の違いはあります。
また、Infinity×0は「NAN(非数)」として扱われます。
NANもInifinityと同様に計算できない数値です。

計算できないInifinityですが、制御文のなかでinifinityの判定は可能です。


Scratchではこのように大きな数値が表示されますが、プログラム言語や扱う数値の種類によっては、そこで例外というエラーが発生して、ゲームが動かなくなります。

実際のプログラムでは滅多にこんなサイズの数値を扱うことはないと思います。
というか、こんな数値を見るのは、だいだいはバグが原因ですね。
サンプルのようにすごい数値の掛け算をするときに発生することもあるかなと思います。

もし、自分で作るプログラムの中に掛け算を繰り返す場所がある場合は問題ないか確認してみましょう。

今回作成したプログラムを公開しています。
動作の確認をしてみてください。