わけいの多肉ブログ

アクセスカウンタ

zoom RSS 1+1=2は本当か?

<<   作成日時 : 2018/10/23 22:12   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 38 / トラックバック 0 / コメント 4

●先日「1=2」を証明の記事を書いたが
先日、「1=2」を証明の記事を書いたが、一瞬成立するように見えるのはやってはいけない割り算に「0」を用いたことが原因との結論だった。
その時の記事「「1=2」を証明するはこちらです。」

あの後、気づいたのですが、実は算数とは別の世界では、それが通用することがあるのです。


●あるプログラミングの記述の一部ですが・・・
@ a=1
A a=a+1


というのが、間違いなく成立するんです。
一見すると、
@で「aは1」で、Aでは「aはa+1」としています。
つまり、「aは1」だから「1=1+1」になり、それは「1=2」と言っているように見えます。

これじゃあそのプログラムは、変だ!、役に立たないと思われそうですが、現実にちゃんと正確に計算・処理してくれます。

●「a=1」の解釈が異なる
プログラミングでの@の「a=1」の意味は、左側に「a」という「変数」があり、右側に「1」という「値」があり、「aという変数に1という値を入力する」の意味になります。
Aも同様に、「aという変数にa+1の演算結果の値を入力する」の意味になります。

数学の「=」は、左辺と右辺の両辺は同じとの意味ですが、プログラミングでは「=」は左側の変数に、右側の演算結果を出力するということなのです。
見た目は同じでも、定義が異なっているということになります。


●それが何か役に立つのか?
上のプログラムに、少し加えると・・・
@ a=1 (Bに進む)
A a=a+1
B (処理1)
C aが10以下ならAに、(10より大きければDに)
D (処理2)

となれば、最初に@でaは1でしたが、Bに進んで何かの処理をして、
CのところでAに戻されaは2になります。
これがaが10になるまで繰り返されて、
10より大きくなるとやっとDに進んで別の処理を行う。

※これを使った簡単な例・・・
1位から10位までの人には〇〇(得点、賞品など)を与え、11位から20位までの人には▽▽を与え・・・
というような、ことができます。

ここで言いたいことは、「a=a+1」が成立する世界があることです。

これを通常の算数で考えると、左側にあろうと右側にあろうとどちらも「a」は「数値」である変数なのですが、
コンピュータの方は、左側にあるときは「変数を入れる箱」であり、右側にあるときは「変数を入れる箱に入っている値a」と考えることになります。

したがって両辺の「a」は意味の違う「a」なので、算数のように両辺から「a」を引くと「0=1」などと、おかしなことになりますので、両辺から「a」を引く処理は出来ないということになります。

※実は「変数を入れる箱」には、文字列を入れることもできるので、「値a」は数値のこともあり文字列の場合もありますが、ここでは数値に限った話に留めておきます。(例:「きょうは」+「いい天気」→「きょうはいい天気」)


●1+1=2ではない世界
コンピュータは、2進法で、使えるのは「0と1」ですね。
2や3などは使えない、ということは「1+1=2」ではないということになります。

では、いくつかと言うと「1+1=10」です。
何しろ2進法なので、0→1と来たら、次は1桁多くなり、10になります。
10→11と来たら、次はまた1桁上がって100になるというシステム。

※3進法だと、使えるのは「0、1、2」なので、0→1→2と来たら、次は10ですね。12の次は100に。
同様な考えで、お馴染みの10進法で使える数字は「0、1・・・8、9」で、0→1→・・・→8→9と来たら1桁繰り上がって10に、97、98、99と来たら、次は1桁繰り上がって100ですね。

※参考までに16進法だと、使える数字の数が足りないので「a、b、c、d、e、f」を数字として使います。
「0、1・・8、9、a、b・・・e、f」の16種類が使える数字になります。0→1→・・・8→9→a→b→・・e→fまで来たら、やっと1桁繰り上がって10になります。99の次は100でなくて9aですね、9fの次がa0です。ffの次がやっと100です。

●論理和だと「1+1=1」
コンピュータで用いる論理演算は、1が真、0は偽ととらえて、0か1の入力値に対して、求めに応じて0か1の値を出力するものです。
論理演算には、論理和(or)、論理積(and)、否定(not)など、他にもあります。

ここでは、論理和(or)についてだけ説明します。
論理和(or)とは、入力値にいずれか1が入力されたときに1を出力する。それ以外の入力値のときは0を出力する。

入力データのAとBが以下のときに、「A+B」は以下の右側のように出力されます。
A    B    A+B
0    0     0
0    1     1
1    0     1
1    1     1

ここでは、1+1=1 と計算しているところに注目していただきたいと思います。
0+0と0+1と1+0は算数で考えることと同じですね。
でも1+1は全く異なっています。
足し算の計算をしているのではなく、入力値のAとBのいずれかに「1」が含まれているかを判断しているのです。

これが何なの?となると思いますが、色々な使い道があるのです。
簡単な例だと:
2つの条件があり、条件Aが男性、条件Bが60歳以上のとき、どちらかの条件に該当すればプレゼントをする場合に、
・私は男性、・私は64歳のデータなら・・・
Aは1、Bは1、A+Bは1と出力されます。 → プレゼントする。

・私は女性 ・私は30歳だと、Aは0、Bは0で、A+Bは0 → プレゼントしない。
・私は女性 ・私は61歳だと、Aは0、Bは1で、A+Bは1 → プレゼントする。

こんな簡単な事例でも、データが数十万あると人間だとミスの1つや2つしそうですが、コンピュータだと瞬時に間違いなく処理できます。実際には、色々な論理演算を使ってもっと複雑な処理にも使われているでしょう。

※エクセルにも、論理演算がありました。
・OR(条件1,条件B,・・・)は、条件のいずれかが満たされていると1、そうでないときは0を返す。
・AND(条件A.条件B,・・・)は、条件のすべてが満たされていると1、そうでないときは0を返す。
これらをIF(論理式,〇〇,▽▽)と組み合わせて、論理式の値が1なら〇〇の処理、0なら▽▽の処理を行うなどと、指定します。
表現方法は異なりますが、コンピュータの論理演算と同じですね。

●通常の世界とそうでない世界
通常の社会生活は、いちいち説明しなくても、10進法の算数を前提にしているので混乱は生じません。
しかし、10進法の算数の前提を取っ払うと、今まで当たり前と思っていたことが当然ではなくなることがあり得ることを知っていただければ、有難いと思います。

最近は、小学校でもコンピュータの操作や簡単なプログラミングの時間があるらしいす。
そうすると、算数の問題には、「この問題は10進法です。コンピュータの世界とは別です。」などの注釈が必要になってくるかも知れません。


※今回は、昔の知識で覚えている範囲で書きましたが、プログラミングの進化はハードの進化ほどではないので、多少変化している部分があったとしても、根本的な部分は変わっていないと思いますが、どうなんでしょうか?










テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 38
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた 驚いた 驚いた 驚いた 驚いた 驚いた 驚いた 驚いた
面白い 面白い 面白い 面白い 面白い 面白い
ナイス ナイス ナイス ナイス
ガッツ(がんばれ!) ガッツ(がんばれ!)

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(4件)

内 容 ニックネーム/日時
昔、パソコンが出始めた頃ですが、BASICの勉強をして、労組の会計システムなどを作っていましたから、その頃の記憶が蘇りました。
長さん
2018/10/24 10:46
長さんへ、コメントありがとうございます。
長さんも、プログラム作りやられていたんですね。仲間ができてうれしいです。
昔は、無料のMS-DOS時代で、プログラムの種類も少なく、色々なプログラムが作れましたが、Windowsになってからは、多様なプログラムが出来て自分で作る必要性がなくなり、次第に遠ざかり、その後は市販のプログラムを如何に使いこなすかの方向になってしまいました。
おそらく、長さんもそうかな?と推測します。
当時の思い出話は尽きないですが、1つだけ自慢話をさせてください。職場に初めて1台導入され、すぐに自分の仕事用に表計算のプログラムを作り報告書を作成しているところを、メンテナンスに来た業者の方が「うちのコンピュータでこんなことが出来るの」と驚き、写真を撮って帰ったことがありました。
わけい
2018/10/24 16:55
おはようございます。

正直私にはちょっと難しいので、3度読み返しましたら、
段々判ってきました。

夜にでももう一度きちんと拝読いたします。
ここまでお詳しいと面白いでしょうねえ。
羨ましいです。

私は全く駄目なので( ;∀;)
サチ
2018/10/25 09:00
サチさんへ、コメントありがとうございます。
3度も読んでいただき、恐縮です。
わかりにくい点があれば、遠慮なく言っていただければ、直ぐにでも修正したいと思います。
文章の上手い下手は別にして、内容は現役のもっと若いシステムエンジニア・プログラマーにチェックしてもらってOKをもらってます。
ただ、わかりやすさの点では、まだ修正の余地は大いにあると思っています。
是非とも、「ここの意味が分からない・・」などと、指摘お願いします。
わけい
2018/10/25 11:40

コメントする help

ニックネーム
URL(任意)
本 文
1+1=2は本当か? わけいの多肉ブログ/BIGLOBEウェブリブログ
文字サイズ:       閉じる