Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コンピュータと数学
Search
Shohei Yamasaki
November 07, 2015
Programming
0
1.5k
コンピュータと数学
2015/11/6 プログラマのための数学勉強会@福岡#2で発表したスライドです。
目次
* 位取り基数法
* 基数変換
* データの表現方法
* コンピュータが行う演算
Shohei Yamasaki
November 07, 2015
Tweet
Share
More Decks by Shohei Yamasaki
See All by Shohei Yamasaki
AMPで爆速WEBサイト
shoyan
0
170
ハフマン木の作成
shoyan
0
14k
PHPコーディング規約とサポートするツール
shoyan
2
3.4k
暗号技術を支える素数
shoyan
2
3k
Other Decks in Programming
See All in Programming
第3回関東Kaggler会_AtCoderはKaggleの役に立つ
chettub
3
1.2k
仕様変更に耐えるための"今の"DRY原則を考える
mkmk884
9
3.2k
「個人開発マネタイズ大全」が教えてくれたこと
bani24884
1
280
Unity Android XR入門
sakutama_11
0
180
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
1k
ML.NETで始める機械学習
ymd65536
0
240
CloudRun, Spanner に対する負荷試験の反省と オブザーバビリティによるアプローチ
oyasumipants
1
110
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
8
1.4k
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
160
Generating OpenAPI schema from serializers throughout the Rails stack - Kyobashi.rb #5
envek
1
410
Learning Kotlin with detekt
inouehi
1
190
自力でTTSモデルを作った話
zgock999
0
120
Featured
See All Featured
Statistics for Hackers
jakevdp
797
220k
The Cult of Friendly URLs
andyhume
78
6.2k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Building Applications with DynamoDB
mza
93
6.2k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
650
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
13
1k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
11
1.3k
Bash Introduction
62gerente
611
210k
A Tale of Four Properties
chriscoyier
158
23k
Transcript
コンピュータと数学 プログラマのための数学勉強会@福岡#2 2015.11.06 @shoyan
4IPIFJ:BNBTBLJ !TIPZBO • プログラマー (週末は農夫) • 2児の⽗父 •
GMOペパボ
࣍ • 位取り基数法 • 基数変換 • データの表現⽅方法
• コンピュータが⾏行行う演算
ͱ͍͍ͬͨͳΜͰ͠ΐ͏ʁ • 「ひゃくじゅう」 • 2進数の「いち、いち、ぜろ」で「6」 • 警察呼ぶ番号
ͲΕਖ਼ղͰ͢
༩͑ΒΕͨใΛͲ͏ѻ͏͔ʹΑͬ ͯղऍ͕มΘΓ·͢
ਓؒͱίϯϐϡʔλͷҧ͍
ਓؒ ⼈人間は数値や⽂文字、画像、⾳音楽などを別のもの として扱う
ίϯϐϡʔλ コンピュータは数値や⽂文字、画像、⾳音楽などを 「0」と「1」に置き換える
ਐ • 「0」と「1」しか使わない。「2」になった ら位があがる • 例例えば12は 「1110」 •
コンピュータにとって扱いやすい • 英語でバイナリ(binary)と呼ぶ
ਐ • 私たちにとって最も馴染み深い • ⼈人間の指は10本あるので10進数が使われる • ⼈人間にとって扱いやすい
ҐऔΓه๏ • 決められた種類の数字を使って、その数字を 各桁に配置して数を表す⽅方法 • 2進法 • 10進法
• 16進法
ਓؒͱίϯϐϡʔλͷڮ͠ • コンピュータは「0」と「1」しか扱えない • ⼈人間は10進法が得意(2進法?なにそれ、お いしいの?) • 変換が必要
جม
جม • 表記されている数値を別の位取り基数法に変 換すること • 2進法→10進法 • 10進法→2進法
ܻͷ࣋ͭҙຯ 10進数の「1532」という値。 1000が1つ 100が5つ 10が3つ 1が2つ これらを全部⾜足したもの。1000や100、10や1は各
桁に意味を持たせている重要な値で重みと呼ぶ
Λࣜʹ͢Δͱ (1000 × 1) + (100 × 5) + (10
× 3) + (1 × 2) = (10×10×10×1) + (10×10×5) + (10×3)+(1×2) = (10 × 1) + (10 × 5) + (10 × 3) + (10 × 2) 3 2 1 0
Λࣜʹ͢Δͱ • ͯ͢ͷܻͷॏΈ͕ʮ10ͷnʯͰද͞ΕΔ • ܻ͕܁Γ্͕Δ͝ͱʹॏΈͷେ͖͘ͳΔ
ج • ॏΈͷجຊʹͳΔΛجɺ·ͨఈʢ͍ͯʣ ͱݺͿ • 10進数なら基数は10 • 2進数なら基数は2
ਐ͔Βਐม͢Δ • mਐ๏ͷʮmʯ͕جʹͳΔ • ֤ܻͷॏΈʮmͷnʯͱͳΓɺnӈͷܻ ͔Βॱʹ0, 1, 2, 3 …
ͱͳΔ
ਐ͔Βਐม͢Δ 2進数「10100」という値を10進数に変換 (2 × 1) + (2 × 0)
+ (2 × 1) + (2 × 0) + (2 × 0) = (16×1) + (8×0) + (4×1) + (2×0) + (1×0) = 16 + 0 + 4 + 0 + 0 = 20 4 3 2 1 0
ਐ͔Βਐม • 10進数「1530」を 2進数に変換 • その前に ちょっとした⼩小話をします
ਐ͔Βਐม 「1530」を基数10で割ってみると 1530 ÷ 10 = 153 … 0
153 ÷ 10 = 15 … 3 15 ÷ 10 = 1 … 5 1 ÷ 10 = 0 … 1
ਐ͔Βਐม 基数で繰り返して割り算したときの余りが 「1530」なのです。 このことを⽇日本⼈人は昔から知っていました。
ຊޠ େݴ༿ w IUUQTKBXJLJQFEJBPSHXJLJ&%&#&# ⽇日本語では「あまり」と して呼ばれている
ਐ͔Βਐม • もとの値を2進法の基数である「2」で割り算する • その商を再び「2」で割り算する • 商が0になるまで繰り返す
ਐ͔Βਐม 10進数の「20」を2進数に変換すると 20 ÷ 2 = 10 … 0
10 ÷ 2 = 5 … 0 5 ÷ 2 = 2 … 1 2 ÷ 2 = 1 … 0 1 ÷ 2 = 0 … 1 「10101」になる
Ҏ֎ͷද͠ํ
Ҏ֎ͷจࣈͷද͠ํ • コンピュータの世界では⽂文字や写真なども 「0」と「1」で表現します
จࣈ • ⽂文字コード表を使って、その⽂文字に対応する コードを8桁(1バイト)の2進数に置き換え て表現している
"4$**ίʔυ
"4$**ίʔυ • 例例えば「A」であれば、⽂文字コードは「65」 • 基数変換して2進数にすると「01000001」
จࣈίʔυ • ASCIIコード以外に、⽂文字を2バイトで扱う、 JISコードやシフトJISコード、EUCコード、 Unicodeなどがある • ⽂文字化けは⽂文字を記録するときに使った⽂文字 コード表とそれを解釈するための⽂文字コード 表が異異なるときに起こる
จࣈίʔυ • ⽂文字コード表によって数値データに変換され た⽂文字は⾯面⽩白い使い⽅方ができる • ⽂文字コード表のAは「65」、aは「97」 • 32を⾜足すと、⼤大⽂文字→⼩小⽂文字に変換できる
৭ • コンピュータは画像データを⼩小さな点の並び として扱う • この点をピクセル(pixel)と呼び、各ピクセル の⾊色情報を数値にして画像を記録している
৭ • コンピュータ上に表⽰示される⾊色は、⾚赤と緑、 ⻘青の3⾊色の光の組み合わせでできている • ⾚赤と緑を混ぜると⻩黄⾊色、⾚赤と⻘青を混ぜると紫 になる •
⾊色を混ぜるには光の強さで調節する
৭ • 光の強さは0 〜~ 255の範囲で指定する • 0はまったく発光していない状態 •
255はいちばん強い光
৭ ৭ ͷڧ͞ ͷڧ͞ ੨ͷڧ͞ ࠇ
੨ ԫ ࢵ ਫ৭ ന
৭ • 0 〜~ 255は2進数の8桁(8ビット)で表現でき る • ⾚赤、緑、⻘青にそれぞれ8ビットずつ使って1ピ クセルの⾊色を表現する
• この⽅方式を24ビットカラーと呼ぶ
ίϯϐϡʔλʹͰ͖Δ͜ͱ
ίϯϐϡʔλʹͰ͖Δ͜ͱ ೖྗ ԋࢉ ग़ྗ ใΛड͚औͬͯɺԋࢉͯ͠ɺ݁ՌΛग़ྗ͢Δ͜ͱ ͜ͷ͔ͭ͠Ͱ͖ͳ͍
ԋࢉ コンピュータが⾏行行う演算には、その内容ごとに呼び 名が付けられている w ࢉज़ԋࢉ w γϑτԋࢉ w Ϗοτԋࢉ w
ؔԋࢉ w ཧԋࢉ
ࢉज़ԋࢉ 数値データを使って四則演算(⾜足し算、引き 算、掛け算、割り算)を⾏行行うこと
ࢉज़ԋࢉ ࢉज़ԋࢉࢠ ҙຯ ͠ࢉ Ҿ͖ࢉ ֻ͚ࢉ ׂΓࢉ
γϑτԋࢉ • シフト演算とは2進数のビットパターンを右ま たは左にずらす演算である • 掛け算、割り算と同じ結果を得ることができ る
γϑτԋࢉ コンピュータの演算では以下の2通りのシフト演 算がある • ཧγϑτʢର: ූ߸ͳ͠σʔλʣ • ࢉज़γϑτʢର: ූ߸͖σʔλʣ
γϑτԋࢉ わかりやすくするために10進数で説明します もとの数値 左に1桁移動 左に3桁移動
γϑτԋࢉ • 左に1つ移動すれば10倍される • 左に1つ移動すれば • これを2進数で⾏行行う
1 10 倍される
ཧγϑτ • 2ਐΛࠨʹSϏοτγϑτ͢Δͱɺ2 ഒ͢Δ ͜ͱʹ૬͢Δ s kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm
ཧγϑτ • 2ਐΛӈʹSϏοτγϑτ͢Δͱɺ2 ഒ͢Δ ͜ͱʢ2 ͰׂΔ͜ͱʣʹ૬͢Δ s -‐‑‒s kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm
ࢉज़γϑτ • 負の数でも掛け算や割り算ができる • 符号付き 2進数を左にSビット算術シフトする と、2 倍することに相当する
kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm s
ࢉज़γϑτ • 符号付き2進数を右にSビット算術シフトする と、2 倍すること(2 で割ること)に相当 http://kccn.konan-‐‑‒u.ac.jp/information/cs/cyber03/cy3_̲shc.htm
-‐‑‒s s
Ϗοτԋࢉ • 2進数のビットを使った演算 • 特定の桁が1かどうかを調べたり、指定した桁 の値だけを取り出したりするときに使う
৭ͷΛऔΓग़͢
⾚赤 緑 ⻘青 ⻘青の成分が欲しい時は、右側の8ビットを1、他を 0としてAND演算を⾏行行う 11111111 11011100 00011001 00000000 00000000 11111111 AND ) 00000000 00000000 00011001
৭ͷΛऔΓग़͢ • 緑の成分を取り出したいときは、同じように 緑の成分の部分のビットを1にして AND演算 する。 • 演算結果を8ビット論論理理右シフトする
ϚεΫ • コンピュータの世界では、「マスクをかけ る」と表現することがある • マスクをかけるとは「0と1のビットの並びに 覆いを被せて、必要な箇所だけ取り出す」こ と
ؔԋࢉ • 2つの値を⽐比較してその関係が正しいか、正し くないかを調べるための演算 • ⽐比較演算とも呼ばれる
ؔԋࢉ ؔԋࢉࢠ ҙຯ ͍͠ ͘͠ͳ͍ ΑΓେ͖͍
ΑΓখ͍͞ Ҏ্ ҎԼ
ཧԋࢉ • 与えられた命題が正しいか正しくないかを判 断する演算 • 論論理理演算が取り扱うデータは真(True)、偽 (False)のみ •
命題とは「正しい」か「正しくない」かを判 断できる⽂文のこと
ཧੵ "/%ԋࢉ 「変数aの値が0以上である」かつ「変数aの値 が100以下」である というように関係演算を複数組み合わせて使う
ཧ 03ԋࢉ 「変数aの値がʼ’Aʼ’と等しい」または「変数aの値 がʼ’aʼ’と等しい」である どちらかの条件がTrueであればTrue
ຊͷհ • ⽂文系プログラマーの数学知識識 基礎の基礎 • http://www.amazon.co.jp/dp/ 4774139947
ຊͷհʢʣ • The Zombie Book • 電⼦子書籍を配布しています(私が執筆しまし た。数学とは関係ないです)。 •
http://balloonbros.cc/zombie-book/
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠