クリエイター手抜きプロジェクト[454]IoT編 IchigoJamで画面に数字を表示する/古籏一浩

投稿:  著者:  読了時間:8分(本文:約3,500文字)



今回はIchigoJamで画面に数字を表示してみましょう。IchigoJamで数字を表示するにはPRINT命令を使います。以下のように入力して、リターンキーを押してください。

PRINT 123

リターンキーを押すと画面には

123

と表示されるはずです。それでは、次に以下のように入力してリターンキーを押してください。

PRINT 12.34

すると以下のように表示されます。

12Syntax error

12.34と表示されずエラーになってしまいます。これはIchigoJamは小数を扱うことができないので、このような結果になってしまいます。実は今のコンピューターは、10進数の小数値の扱いは得意ではありません。




また、IchigoJamが扱える整数の範囲も決まっていて、-32768〜32767までになります。どうしてこの値なのかというと、IchigoJamが扱う数値が16ビットだからです。もし、32ビットなら

-2147483648〜2147483647

までの範囲になります。負数を考慮せず正数なら

16ビットの場合(2の16乗)
0〜65535

32ビットの場合(2の32乗)
0〜4294967295

となります。この範囲を超えると、うまく計算できないこともあるわけです。もちろん、今のコンピューターは上手にできていて、かなり大きな数まで計算できます。しかし、限度があります。ですから、一定の範囲を超えた計算をすると期待する結果にならないことがあるのです。

ビットそのものが分からないという人もいると思いますので、簡単に説明します。ビットはデジタルの世界での最小単位です。ビットは0か1のどちらかになります。このビットが8つ並ぶと8ビット、16個並ぶと16ビットです。32個並べれば当然32ビットとなります。

●8ビット
11111111

●16ビット
1111111111111111

●32ビット
11111111111111111111111111111111

このビットが、どのくらいなのかは非常に重要です。というのも、ビットの数によって一度に扱える数が変わるからです。

IchigoJamのように16ビットまでの数値しか扱えないと、日常的な計算(例えばお金の計算など)にも困ってしまいます。

16ビットなら6万円程度までしか計算できませんが、32ビットなら43億円くらいまで計算できることになります。64ビットなら1844京円(京は兆の上の単位)まで計算できるので、投資家・投機家の皆さんも困らないでしょう。

ところで0と1しかないのに、どうやって10進数を扱っている(表している)のでしょうか。これは、各ビットに重みをつけてあるというのがポイントです。各ビットに2のn乗の重みをつけておくのです。

例えば以下の2ビットで説明します。2ビットなので以下の4パターンがあります。

00
01
10
11

右側のビットには2の0乗である1の重みを割り当てます。左側のビットには2の1乗である2の重みを割り当てます。すると以下のようになります。=の右側は10進数にした結果です。

0+0 = 0
0+1 = 1
2+0 = 2
2+1 = 3

ちなみに4ビットなら2の3乗(8)、2の2乗(4)、2の1乗(2)、2の0乗(1)となるわけです。整数計算はこんな感じです。

最後に小数値の計算も少し説明します。整数の場合は2のn乗ですが、小数値の場合は2のマイナスn乗で計算していきます。例えば、以下の場合を見てみましょう。(10進数に見えますが、以下の3行はすべて2進数です)

0.1
0.01
0.11

0.1の1は2のマイナスn乗なので0.5になります。0.01なら0.25です。つまり、ビットが右に長くなるに従って値が半分になっていくわけです。すると、先ほどの3行を10進数にすると以下のようになります。

0.1 = 0.5
0.01 = 0.25
0.11 = 0.5+0.25 = 0.75

もし、小数点以下を8ビットで表すと以下のようになります。

0.10000000 = 0.5
0.01000000 = 0.25
0.00100000 = 0.125
0.00010000 = 0.0625
0.00001000 = 0.03125
0.00000100 = 0.015625
0.00000010 = 0.0078125
0.00000001 = 0.00390625

小数点以下8ビットを合計すると0.99609375になります。コンピューター内部では、このように2のマイナスn乗の足し算で計算するため、10進数の0.1などを正確に表すことができません。

よくコンピューターのプログラムで0.1を10回加算すると1にならない、ということがあります。これは、上記のような計算が行われるため0.99999のような近似値になり、1にならないためです。

アニメーションなどを作成する場合、計算式は正しいのに結果がおかしいのは、このような近似値による演算誤差による影響があるためです。

もちろん、演算誤差が発生しては困る業界もあります。そのような場合は、演算誤差を出さないようにするための計算プログラムを、別途用意しています。

また、FORTRAN言語のように科学計算で使われる場合は、小数点以下何桁までを保証するかを決めることができます。

一般的なコンピューター(とプログラム言語)では、数値はIEEE754の規格に沿って値を表しています。興味があったら読んで見てください。

https://ja.wikipedia.org/wiki/IEEE_754

ということで、長くなったので今回はここまで。


【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/

絵が上手い方がいいけど上達しない。絵が上手いかどうかは分からないけど下手だというのは分かるf(^^;

プログラムの場合は「わかりやすくすっきり」したコードで済む場合もあるし、大変複雑になってしまう場合もあります。結局のところ、複雑怪奇なプログラムは30年以上たつと自分で自分のプログラムを解析しなければならず大変。他人が解析する場合は、もっと大変なはず。

こうなると、きれいなプログラムよりは、わかりやすくメンテナンスしやすいプログラムの方がよいのかなと。ただ、昔はメモリの制約もあってかなりトリッキーなことをしないと駄目でした。ソフトウエアレベルでも駄目な場合は、ハードウェアレベルで処理していることもありました。

・ MZ-80パソコン開発物語
http://blogs.yahoo.co.jp/nagusa_kei/10285931.html

この「MZ-80パソコン開発物語」の中のページに、ハードウェアとソフトウェアの両方を駆使した話があります。興味のある方は読んでみるとよいでしょう。
http://blogs.yahoo.co.jp/nagusa_kei/17789547.html

・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/

・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/

・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/

・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/

・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/

・ExtendScript Toolkit(ESTK)基本編
http://www.amazon.co.jp/dp/B00JUBQKKY/

・データビジュアライゼーションのためのD3.js徹底入門
http://www.amazon.co.jp/dp/4797368861

・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/

・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/