データサイエンス、機械学習、ブロックチェーンなど、数学理論に裏打ちされた技術に注目が集まっています。それに従い、エンジニアにも数学の知識がより必要になってきているのは、良く耳にするところ。そこで、高校数学を学び直せるクイズを用意!さあ、あなたは何問解ける!?
問題1.10進数と2進数の違い、分かりますか?【Pythonで学び直す高校数学】
これからのプログラミングには数学が大事――。そんなことを耳にする機会が最近増えてきました。その理由は人工知能(AI)。AIの領域では数学の知識が必須と言われています。ところが、AIを担える高スキル人材は不足しており、今後も人材不足は続いていくと予想されています。
でも、プログラマーには文系出身の人も増えています。高校で文系に進むことを選んだ人には、数学が苦手という人が多いのでは? これまでは「苦手だから」と敬遠してきた数学を将来に向けて学び直さないとならない時期に来ているのかもしれません。
だからといって、自分がどこまで分かっていて、どこから学び直さなければならないのかを探すのは簡単ではありません。そこで、この連載では高校数学のレベルに焦点を当て、自分がどれだけ数字を分かっているかどうかを判断できるようなクイズを用意しました。取り上げるのは、プログラマーにとって身に付けておきたい領域を中心に、2進数や方程式、ベクトルと行列、統計など。この連載で力試しをして、どのあたりから数学を勉強するか、見当を付けるのに役立ててください。
記事中、数学の理論や計算を解説するところがあります。それを実際に計算して確かめてみるのが、理解の早道です。本連載では、その確かめる作業をPythonを使ってやってみます。Pythonをすでに使っているという人はもちろんですが、これを機会に数理処理に強いとされるPythonを体験し、数学的な処理をするコーディングのカンどころを養うこともできるようにしました。
本連載ではPythonの環境としてAnacondaを利用します。そのインストールと使い方については、詳しく解説しているサイトがたくさんありますので、是非参考にしてみてください。
基数変換をPythonで実行
では、さっそく数学の世界を覗いてみましょう。今回のテーマは、「2進数のおさらい」です。
コンピューターの世界で使われる数である2進数は、
・0と1の2つの数字を使って表す
・並べた数字の桁は、右から順に20、21、22、23……を表す
という決まりで表す数のことです。でも、表し方を上のように書いてしまうと、ピンと来ないという人もいるかもしれません。
では、見慣れた10進数で同じように表し方を見てみましょう。決まりそのものは2進数と同じです。10進数は、
・数字には0、1、2、3、4、5、6、7、8、9の10種類を使う
・並べた数字の桁は、右から順に100、101、102、103……を表す
という決まりで表します。100は1、101は10です。だから一番右の桁を「1の位」、2番目の桁を「10の位」というわけです。
2進数の「2」や10進数の「10」のことを「基数(きすう)」または「底(てい)」といいます。コンピューターでは16進数が使われることをご存じの人もいると思います。16進数の場合、基数は16です。
もう少し、10進数を研究しておきましょう。例として、「2365」のそれぞれの桁がどうして「2」「3」「6」「5」になるかを計算して求めてみます。
各桁の値は、「元の値を基数で繰り返し割ったときの余り」になります。まず「2365」を基数の10で割ります。すると、商が「236」で、余りは「5」になります。この余りが一番右の桁(1の位)の値になります。次に、最初の計算の商(この場合は「236」)を再び10で割って、余りを次の桁の値に。さらにその商を10で割って、余りを次の桁の値に……という計算を、商が「0」になるまで繰り返します。
【問題】10進数の26を2進数で表すと?
2進数に変換するときも、計算方法は同じです。基数である「2」で割り算をする点が違いです。では、問題です。まずは自分で考えてみてください。
「2365」から10進数の各桁を求めたときと同じ計算をしてみましょう。まず「26」を基数の「2」で割ります。すると、商が「13」、余りが「0」と求められます。この余りの「0」が一番右の20の位の値になります。次に、前の計算の商である「13」を「2」で割り、余りを求めます。これを商が「0」になるまで繰り返します。
これで、10進数の「26」を2進数に変換すると「11010」になることが分かりました。このように、10進数から2進数への変換は、変換後の基数である2で割り算することを繰り返す計算になります。
この計算をコンピューターにやってもらいましょう。ここでは、Anacondaのインストールにより利用できるJupyter Notebookを使ってプログラミングします。Jupyter Notebookを使ったことのない人は、まずスタートメニュー(Windows)やアプリケーションフォルダ(Mac)からJupyter Notebookを起動します。画面が開いたら右のほうにある「New」ボタンを押し、表示されたメニューから「Python3」を選びます。
するとプログラム作成画面が開きます。「In [ ]:」という表示の右側にあるテキストボックスに、プログラムを入力していきます。入力し終えたら、ツールバーにある「Run」ボタンを押すと、プログラムを実行できます。
ではここに、前述の計算をするプログラムを入力して、10進数を2進数に変換してみましょう。具体的なプログラムは以下のリストです。
※各行の先頭にある行番号は入力しません。
1: def dec2bin(target): 2: amari = [] # 余りを入れるリスト 3: 4: # 割り算の商が0 になるまで 5: while target != 0: 6: amari.append(target % 2) # 余り 7: target = target // 2 # 商 8: 9: # リストの要素を逆順にして返す 10: amari.reverse() 11: return amari
このリストでは10進数を2進数に変換する「dec2bin()」という関数を定義しています。基数変換をしているのが5~7行目です。このプログラムでは、target
という変数で、元の値を基数で割った商を判断しています。5行目の「while targe ! = 0:
」は「商であるtarget
がゼロになるまで、次の行からの処理を繰り返す」という意味です。
6行目で、2で割った余りを保存する処理をしています。amari.append()
が、余りの計算結果を2行目で定義したamari
に追加する関数です。その引数であるtarget % 2
の%
は、「target
を2で割った余りを求める」という演算子です。
7行目で、商を求めています。/
は割り算の演算子ですが、//
は商を求める演算子です。この行でtarget
を新たに計算した商で書き換え、5行目に戻ります。ここでtarget
がゼロになっていたら、10行目の処理に移るというわけです。
これを実行したのが下の図です。引数として26を入れた「dec2bin()」関数を書き足して実行すると、
このように[1,1,0,1,0]が処理結果として表示されます。これは、26が2進数では「11010」であることを表しており、正しく処理できたことが分かります。
※この図では、上で紹介したリストからコメントや空き行を省略しています。
最後の行で実行しているdec2bin()関数の引数を変えて、10進数から2進数への変換をいろいろ試してみましょう。なお、基数変換をするだけならば、Pythonには「bin()」という関数が用意されています。PythonのシェルウィンドウもしくはAnacondaのPythonインタプリタなどで、「bin(26)
」と入力すると、「'0b11010'
」と表示されます。先頭の「0b」は、以下に続く数値が2進数であることを示しています。
文/仙石 誠(日経BP)
文系出身者でも分かりやすいと評判の数学【再】入門書。単に数学理論を解説するだけでなく、Pythonコードで確かめられるところが好評です。
著者:谷尻かおり(メディックエンジニアリング)
価格:2500円+税
RELATED関連記事
RANKING人気記事ランキング
米国優位が揺らぐ?ひろゆき「CPUの進化でGPU神話って崩壊しません?」【AI研究者・今井翔太が回答】
NEW!
表面的なテクニックより「基礎基本の重要性」に気付かされた一冊【Node.js 日本ユーザーグループ代表・古川陽介】
AWS認定資格10種類を一覧で解説! 難易度や費用、おすすめの学習方法も
正論モンスター化に要注意!ぎくしゃくしない「ミスの指摘」のコツ【澤円「コミュ力おばけ」への道】
社会で成功するゲーマーに、ひろゆきが聞く「現実世界を攻略できないゲーマーに足りないものって何すか?」
JOB BOARD編集部オススメ求人特集
タグ