趣味の投資とプログラミング備忘録

趣味の投資と独学の「R言語」によるプログラミングを混ぜて、なぜ投資が必要なのか、メモがてら書いていきたいと思います。投資もプログラミングも初心者という方の勉強の一助となれば幸いです。

高校でのプログラミングの必修化!

高校でのプログラミングの必修化!

花森ヒロシ
2022/02/22 23:31

 

 

免責事項

当ブログに掲載する情報は投資勧誘を目的としたものではありません。株式などの金融商品の取引は損失を出す恐れがあります。
全て自己判断、自己責任での投資をお願いいたします。
このブログは投稿者が趣味として記載しているものであり、いかなる損失が出た場合でも責任を負うことはできません。
誤情報が入り込んだり、情報が古くなったりすることもあります。
必ずしも正確性を保証するものではありません。また合法性や安全性なども保証いたしません。
当ブログに掲載された内容によって生じた損害等の一切の責任を負いかねますので、ご了承ください。

 


導入

どうも、花森ヒロシです
ちょうど統計解析や視覚化に特化しているプログラミング言語の『R言語』をかじる機会に恵まれ、面白いなと思い、「これを使って何かシミュレーションをしてみたいな」と思ったのがブログを書き始めたきっかけでした。そんな人が書いてるブログです。

 

雑談!

 

今回は雑談です。

 

高校の授業において【情報1】、【情報2】としてプログラミングを含む、情報技術関連の授業が行われるようです。


実際にどういうことをやるのかと文部科学省のページを見てみましたが、独学で勉強してきた私からするとめちゃくちゃ濃い内容でした。

私がプログラミングを齧り始めた当時から今に至るまでの10年以上かけてやっとこさやっていた内容に追いつくどころか、どうやら2~3年で軽く上回るようです。


高校の内容ということで、勉強していた私からするとほとんどの内容は見たことがありました。
ただ、詳しくまでは知らないようなことも一部含まれていたので勉強になりました(苦笑)

 

でも、おそらく私と同世代やそれ以上の人間にはその道の人でない限りはほとんどわからないだろうな・・・という感じのことを今の高校生は必修なんですね(笑)

 

とても素晴らしいなと思いますが、これを他の科目もやりつつ、コロナと戦い、青春しながらも全部できるのか?という疑問が湧いてもきます(笑)
なんか捨てないととても頭に入れきれない気がしてならないです(笑)

 

ちなみに、私が大学生だった当時はちょっとかじった内容を卒業論文に入れたおかげなのかやたら好成績になったのを覚えています。


それが・・・今は普通にできて当然のレベルになるんですね。
月日の流れは恐ろしい。

投資信託の授業も同時に必修化ということで、日本の教育レベルは相当高いなと思わされます。

 

ただ、これを教えて頭にどれだけ入るのか?というのはまた別問題ですけどね。

今はいろんな情報がネットを探せば出てくる時代ですので、リテラシー高く持ってもらって、勉強していってもらいたいですね。

 

 

 

今日「おっ?」と思ったこと

 

あまり意識したことがなかったな思った初歩的なことがありましたのでご紹介させていただきます。

 

独学の問題かもしれませんが、

 

文部科学省ホームページの『高等学校情報科「情報Ⅰ」教員研修用教材(本編)』の第3章コンピュータとプログラミング 学習11コンピュータの仕組み p101『計算誤差について』の項目で、

 

『(1)誤差の考え方』や『(2)プログラミングの誤差を体験する』について、この状態を経験したことがなかったため、そういえばそうだよねとなった項目がありました。

 


私たちが普段使っているのは10進数が多いですが、コンピュータが扱えるのは『0と1』で表す2進数のため、内部で10進数から2進数に直しているんですよね。

 

標的とする数値が、

 

整数の場合、10進数を2進数に変換するには、変換したい10進数を商が0になるまで2で割りつづけ商と余りを求める。求めた余りの部分が2進数への変換結果になります。

 

小数の場合、10進数を2進数に変換するには、変換したい10進数の小数部を小数が0になるまで2倍する。 これで求めた整数部が2進数への変換結果になります。

 

0.28は、2進数にすると0.0100 0111 1010 1110 0001 0100 0111 1010 1110 0001 0100 0111 1010 1110・・・無限に続くが64bitで収まりきらないので、64bit分範囲のみ入る。他は切り捨てられる。

 

0.27は、2進数にすると0.0100 0101 0001 1110 1011 1000 0101 0001 1110 1011 1000 0101 0001 1110・・・無限に続くが64bitで収まりきらないので、64bit分範囲のみ入る。他は切り捨てられる。

 

 

こうして、換算された数値を、2進数のまま計算がされると誤差が生まれてしまうということになります。

 

2進数で計算は面倒くさいので10進数に直すと感覚的にわかりやすくなるので直すと、それぞれ
0.279999999999972715158946812152862548828125

0.26999999999998181010596454143524169921875
となってしまう。

 

もとは0.28-0.27なので、すでに違うなとわかるかなと思います。

 

両方とも他は切り捨てられている分があるので問題が起きてしまうんですよね。

 

 

ただ、この誤差が計算結果に影響することもあれば、影響しないこともあります。

 

例えば

 

0.4-0.3-0.1
0.1+0.1+0.1
0.1*3

 

等でもpythonでは問題が起きます。浮動小数がバリバリ発生します。

 

それに比べ、

0.1*2
0.1+0.1
は、pythonでも問題は起きません。

 

Rだと 0.4-0.3-0.1 は問題が起きますが、
0.1+0.1+0.1
0.1*3
0.1*2
0.1+0.1
は問題が起きません。

 

Rではそういう計算に対する工夫がされているためですね。

 

ただ、この問題を解決する方法として、

 

0.4-0.3-0.1は、(4-3-1)/10など、小数ではなく整数として計算する、という方法があります。

 

整数の場合はよほど大きくない限りは64bit内に数値が入り切ることが多いためですね。

 

正確には違うかもしれませんが、大体こういう考え方で良いかなと、思います。


調べていて、「あーそういえばこういう問題もあったんだな、小数点以下が多すぎて計算が途中で切れてるんだと思ってた」という、実際そうだったかもしれませんが、Rではその辺りも補正してくれていたので、今思えばそういう勘違いもあったんだろうなと感じました。


今日覚えたのは、なるべく小数は使わない(初歩的)ということです(笑)

 

本日は(笑)多めです。

 

以上!

 

以前に投資信託の授業が高校で必修化するとのことで、書いた記事がありますので、もしよろしければどうぞ。↓

2022年度・高校家庭科で『投資信託』の授業開始! - 趣味の投資とプログラミング備忘録