編程的基礎是計算機科學,而計算機科學的基礎是數(shù)學。因此,學習數(shù)學有助于鞏固編程的基礎,寫出更健壯的程序。
本書面向程序員介紹了編程中常用的數(shù)學知識,借以培養(yǎng)初級程序員的數(shù)學思維。讀者無需精通編程,也無需精通數(shù)學,只需具備四則運算和乘方等基礎知識,就可以閱讀本書。
書中講解了二進制計數(shù)法、邏輯、余數(shù)、排列組合、遞歸、指數(shù)爆炸、不可解問題等許多與編程密切相關的數(shù)學方法,分析了哥尼斯堡七橋問題、少年高斯求和方法、漢諾塔、斐波那契數(shù)列等經典問題和算法。引導讀者深入理解編程中的數(shù)學方法和思路。
本書還對程序員和計算機的分工進行了有益的探討。讀完此書,你會對以程序為媒介的人機合作有更深刻的理解。
如果數(shù)學不好,是否可以成為一名程序員呢?答案是肯定的。 《程序員的數(shù)學》適合:數(shù)學糟糕但又想學習編程的你
沒有晦澀的公式,只有好玩的數(shù)學題。
幫你掌握編程所需的“數(shù)學思維”。
日文版已重印14次!
結城浩(Hiroshi Yuki)
生于1963年,日本博學技術作家和程序員。在編程語言、設計模式、數(shù)學、加密技術等領域,編寫了很多深受歡迎的入門書。代表作有《數(shù)學女孩》系列、《程序員的數(shù)學》等。
作者網站www.hyuki.com/
譯者簡介:
管杰
畢業(yè)于復旦大學日語系。現(xiàn)為對日軟件工程師,多年日語技術文檔編寫經驗。愛好日漢翻譯和日本文化史,譯有《明解C語言:入門篇》等。
目錄
第1章 0的故事——無即是有
本章學習內容 2
小學一年級的回憶 2
10進制計數(shù)法 3
什么是10進制計數(shù)法 3
分解2503 3
2進制計數(shù)法 4
什么是2進制計數(shù)法 4
分解1100 5
基數(shù)轉換 6
計算機中為什么采用2進制計數(shù)法 8
按位計數(shù)法 10
什么是按位計數(shù)法 10
不使用按位計數(shù)法的羅馬數(shù)字 11
指數(shù)法則 12
10的0次方是什么 12
10-1是什么 13
規(guī)則的擴展 14
對20進行思考 14
2-1是什么 15
0所起的作用 16
0的作用:占位 16
0的作用:統(tǒng)一標準,簡化規(guī)則 16
日常生活中的0 17
人類的極限和構造的發(fā)現(xiàn) 18
重溫歷史進程 18
為了超越人類的極限 19
本章小結 20
第2章 邏輯——真與假的二元世界
本章學習內容 22
為何邏輯如此重要 22
邏輯是消除歧義的工具 22
致對邏輯持否定意見的讀者 23
乘車費用問題——兼顧完整性和排他性 23
車費規(guī)則 23
命題及其真假 24
有沒有“遺漏” 24
有沒有“重復” 25
畫一根數(shù)軸輔助思考 26
注意邊界值 28
兼顧完整性和排他性 28
使用if語句分解問題 28
邏輯的基本是兩個分支 29
建立復雜命題 30
邏輯非——不是A 30
邏輯與——A并且B 32
邏輯或——A或者B 34
異或——A或者B(但不都滿足) 37
相等——A和B等 39
蘊涵——若A則B 40
囊括所有了嗎 45
德 摩根定律 46
德 摩根定律是什么 46
對偶性 47
卡諾圖 48
二燈游戲 48
首先借助邏輯表達式進行思考 49
學習使用卡諾圖 50
三燈游戲 52
包含未定義的邏輯 54
帶條件的邏輯與(&&) 55
帶條件的邏輯或(||) 57
三值邏輯中的否定(!) 58
三值邏輯的德?摩根定律 58
囊括所有了嗎 59
本章小結 60
第3章 余數(shù)——周期性和分組
本章學習內容 64
星期數(shù)的思考題(1) 64
思考題(100天以后是星期幾) 64
思考題答案 64
運用余數(shù)思考 65
余數(shù)的力量——將較大的數(shù)字除一次就能分組 65
星期數(shù)的思考題(2) 66
思考題(10100天以后是星期幾) 66
提示:可以直接計算嗎 67
思考題答案 67
發(fā)現(xiàn)規(guī)律 68
直觀地把握規(guī)律 68
乘方的思考題 70
思考題(1234567987654321) 70
提示:通過試算找出規(guī)律 70
思考題答案 70
回顧:規(guī)律和余數(shù)的關系 71
通過黑白棋通信 71
思考題 71
提示 73
思考題答案 73
奇偶校驗 73
奇偶校驗位將數(shù)字分為兩個集合 74
尋找戀人的思考題 74
思考題(尋找戀人) 74
提示:先試算較小的數(shù) 74
思考題答案 75
回顧 75
鋪設草席的思考題 77
思考題(在房間里鋪設草席) 77
提示:先計算一下草席數(shù) 77
思考題答案 78
回顧 78
一筆畫的思考題 79
思考題(哥尼斯堡七橋問題) 79
提示:試算一下 80
提示:考慮簡化一下 81
提示:考慮入口和出口 82
思考題答案 82
奇偶校驗 85
本章小結 86
第4章 數(shù)學歸納法——如何征服無窮數(shù)列
本章學習內容 88
高斯求和 88
思考題(存錢罐里的錢) 88
思考一下 89
小高斯的解答 89
討論一下小高斯的解答 89
歸納 91
數(shù)學歸納法——如何征服無窮數(shù)列 91
0以上的整數(shù)的斷言 92
高斯的斷言 93
什么是數(shù)學歸納法 93
試著征服無窮數(shù)列 94
用數(shù)學歸納法證明高斯的斷言 95
求出奇數(shù)的和——數(shù)學歸納法實例 96
奇數(shù)的和 96
通過數(shù)學歸納法證明 97
圖形化說明 98
黑白棋思考題——錯誤的數(shù)學歸納法 99
思考題(黑白棋子的顏色) 99
提示:不要為圖所惑 100
思考題答案 100
編程和數(shù)學歸納法 101
通過循環(huán)表示數(shù)學歸納法 101
循環(huán)不變式 103
本章小結 107
第5章 排列組合——解決計數(shù)問題的方法
本章學習內容 110
計數(shù)——與整數(shù)的對應關系 110
何謂計數(shù) 110
注意“遺漏”和“重復” 111
植樹問題——不要忘記0 111
植樹問題思考題 111
加法法則 115
加法法則 115
乘法法則 117
乘法法則 117
置換 121
置換 121
歸納一下 122
思考題(撲克牌的擺法) 123
排列 125
排列 125
歸納一下 126
樹形圖——能夠認清本質嗎 128
組合 130
組合 130
歸納一下 131
置換、排列、組合的關系 132
思考題練習 134
重復組合 134
也要善于運用邏輯 136
本章小結 139
第6章 遞歸——自己定義自己
本章學習內容 142
漢諾塔 142
思考題(漢諾塔) 142
提示:先從小漢諾塔著手 143
思考題答案 146
求出解析式 148
解出漢諾塔的程序 149
找出遞歸結構 150
再談階乘 151
階乘的遞歸定義 152
思考題(和的定義) 153
遞歸和歸納 153
斐波那契數(shù)列 154
思考題(不斷繁殖的動物) 154
斐波那契數(shù)列 157
帕斯卡三角形 159
什么是帕斯卡三角形 159
遞歸定義組合數(shù) 162
組合的數(shù)學理論解釋 163
遞歸圖形 165
以遞歸形式畫樹 165
實際作圖 166
謝爾平斯基三角形 167
本章小結 168
第7章 指數(shù)爆炸——如何解決復雜問題
本章學習內容 172
什么是指數(shù)爆炸 172
思考題(折紙問題) 172
指數(shù)爆炸 175
倍數(shù)游戲——指數(shù)爆炸引發(fā)的難題 176
程序的設置選項 176
不能認為是“有限的”就不假思索 178
二分法查找——利用指數(shù)爆炸進行查找 178
尋找犯人的思考題 178
提示:先思考人數(shù)較少的情況 179
思考題答案 180
找出遞歸結構以及遞推公式 181
二分法查找和指數(shù)爆炸 183
對數(shù)——掌握指數(shù)爆炸的工具 184
什么是對數(shù) 184
對數(shù)和乘方的關系 184
以2為底的對數(shù) 186
以2為底的對數(shù)練習 186
對數(shù)圖表 187
指數(shù)法則和對數(shù) 188
對數(shù)和計算尺 190
密碼——利用指數(shù)爆炸加密 193
暴力破解法 193
字長和安全性的關系 193
如何處理指數(shù)爆炸 195
理解問題空間的大小 195
四種處理方法 195
本章小結 196
第8章 不可解問題——不可解的數(shù)、無法編寫的程序
本章學習內容 200
反證法 200
什么是反證法 200
質數(shù)思考題 202
反證法的注意事項 203
可數(shù) 203
什么是可數(shù) 203
可數(shù)集合的例子 204
有沒有不可數(shù)的集合 206
對角論證法 207
所有整數(shù)數(shù)列的集合是不可數(shù)的 207
所有實數(shù)的集合是不可數(shù)的 211
所有函數(shù)的集合也是不可數(shù)的 212
不可解問題 213
什么是不可解問題 213
存在不可解問題 214
思考題 215
停機問題 215
停機 216
處理程序的程序 217
什么是停機問題 217
停機問題的證明 219
寫給尚未理解的讀者 222
不可解問題有很多 223
本章小結 224
第9章 什么是程序員的數(shù)學——總結篇
本章學習內容 226
何為解決問題 229
認清模式,進行抽象化 229
由不擅長催生出的智慧 229
幻想法則 230
程序員的數(shù)學 231
CHAPTER1
第1章
0的故事
——無即是有
◎課前對話
老師:1,2,3的羅馬計數(shù)法是I,II,III。學生:加法很簡單嘛。I II,只要將3個I并排寫就行了。老師:不過II III可不是IIIII,而是V喔!學生:啊,是這樣啊!老師:沒錯,如果數(shù)目變大,那數(shù)起來可就費勁啦!
本章學習內容
本章將學習有關“0”的內容。
首先,介紹一下我們人類使用的10進制和計算機使用的2進制,再講解按位計數(shù)法,一起來思考0所起的作用。乍一看,0僅僅是表示“什么都沒有”的意思,而實際上它具有創(chuàng)建模式、簡化并總結規(guī)則的重要作用。
小學一年級的回憶
以下是小學一年級時發(fā)生的事,我依然記憶猶新。“下面請打開本子,寫一下‘十二’。”老師說道。于是,我翻開嶄新的本子,緊握住削尖了的鉛筆,寫下了這樣大大的數(shù)字。
老師走到我跟前,看到我的本子,面帶微笑親切地說:“寫得不對喔。應該寫成12喔。”
當時我是聽到老師說“十二”,才寫下了10和2。不過那樣是不對的。眾所周知,現(xiàn)在我們把“十二”寫作12。
而在羅馬數(shù)字中,“十二”寫作XII。X表示10,I表示1。II則表示兩個并排的1,即2。也就是說,XII是由X和II組成的。
如同“十二”可以寫作12和XII,數(shù)字有著各種各樣的計數(shù)法。12是阿拉伯數(shù)字的計數(shù)法,而XII是羅馬數(shù)字的計數(shù)法。無論采用哪種計數(shù)法,所表達的“數(shù)字本身”并無二致。下面我們就來介紹幾種計數(shù)法。
10進制計數(shù)法
下面介紹10進制計數(shù)法。
什么是10進制計數(shù)法
我們平時使用的是10進制計數(shù)法。
使用的數(shù)字有0、1、2、3、4、5、6、7、8、9共10種a。
數(shù)位有一定的意義,從右往左分別表示個位、十位、百位、千位……
以上規(guī)則在小學數(shù)學中都學到過,日常生活中也一直在用,是眾所周知的常識。在此權當復習,后面我們將通過實例來了解一下10進制計數(shù)法。
分解2503
首先,我們以2503這個數(shù)為例。2503表示的是由2、5、0、3這4個數(shù)字組成的一個稱作2503的數(shù)。
這樣并排的數(shù)字,因數(shù)位不同而意義相異。
2表示“1000的個數(shù)”。
5表示“100的個數(shù)”。
0表示“10的個數(shù)”。
3表示“1的個數(shù)”。
a 這里的“種”指的是數(shù)字的種類,用來說明10進制和2進制中數(shù)字復雜程度的差異。如2561中包含四種數(shù)字,而1010中只包含兩種數(shù)字。——譯者注
綜上所述,2503這個數(shù)是2個1000、5個100、0個10和3個1累加的結果。用數(shù)字和語言來冗長地說明有些無趣,下面就用圖示來表現(xiàn)。
2×1000 5×100 0×10 3×1
如圖,將數(shù)字的字體大小加以區(qū)別,各個數(shù)位上的數(shù)字2、5、0、3的意義便顯而易見了。1000是10×10×10,即10(310的3次方),(10的2次方)
100是10×10,即102。因此,也可以寫成如下形式(請注意箭頭所示部分)。
2×103
5×102
0×10 3×1
再則,10是101(10的1次方),1是100(10的0次方),所以還可以寫成如下形式。
2×103 5×102 0×101
3×100
千位、百位、十位、個位,分別可稱作103的位、102的位、101的位、100的位。10進制計數(shù)法的數(shù)位全都是10n的形式。這個10稱作10進制計數(shù)法的基數(shù)或底。基數(shù)10右上角的數(shù)字——指數(shù),是3、2、1、0這樣有規(guī)律地順次排列的,這點請記住。
3210
2×103 5×102 0×101 3×100
2進制計數(shù)法
下面講解2進制計數(shù)法。
什么是2進制計數(shù)法
計算機在處理數(shù)據(jù)時使用的是2進制計數(shù)法。從10進制計數(shù)法類推,便可很快掌握它的規(guī)則。
??使用的數(shù)字只有0、1,共2種。
??從右往左分別表示1位、2位、4位、8位……
用2進制計數(shù)法來數(shù)數(shù),首先是0,然后是1,接下去……不是2,而是在1上面進位變成10,繼而是11,100,101……
表1-1展示了0到99的數(shù)的10進制計數(shù)法和2進制計數(shù)法。
0到99的數(shù)的10進制計數(shù)法和2進制計數(shù)法
分解1100
在此,我們以2進制表示的1100(2進制數(shù)的1100)為例來探其究竟。
和10進制計數(shù)法一樣,并排的數(shù)字,各個數(shù)位都有不同的意義。從左往右依次為:
1表示“8的個數(shù)”。
1表示“4的個數(shù)”。
0表示“2的個數(shù)”。
0表示“1的個數(shù)”。
也就是說,2進制的1100是1個8、1個4、0個2和0個1累加的結果。這里出現(xiàn)的8、4、2、1,分別表示23、22、21、20。即2進制計數(shù)法的1100,表示如下意思。
3210
1×23 1×22 0×21 0×20
如此計算就能將2進制計數(shù)法的1100轉換為10進制計數(shù)法。
31×22 0×21 0×20
1×2 1×8 1×4 0×2 0×18 4 0 012
由此可以得出,2進制的1100若用10進制計數(shù)法來表示,則為12。
基數(shù)轉換
接下來我們試著將10進制的12轉換為2進制。這需要將12反復地除以2(12除以2,商為6;6再除以2,商為3;3再除以2……),并觀察余數(shù)為“1”還是“0”。余數(shù)為0則表示“除完了”。隨后再將每步所得的余數(shù)的列(1和0的列)逆向排列,由此就得到2進制表示了。
用2進制表示12
同樣地,我們試將10進制的2503轉換為2進制計數(shù)法。
我們從圖1-2可以知道2503用2進制表示為100111000111。各個數(shù)位的權重如下:
1×211 0×210 0×29 1×28 1×27 1×26 0×25 0×24 0×23 1×22 1×21 1×20
在10進制中,基數(shù)為10,各個數(shù)位是以10n的形式表現(xiàn)的。而2進制中,基數(shù)為2,各個數(shù)位是以2n的形式表現(xiàn)的。從10進制計數(shù)法轉換為2進制計數(shù)法,稱作10進制至2進制的基數(shù)轉換。
計算機中為什么采用2進制計數(shù)法
計算機中一般采用2進制計數(shù)法,我們來思考一下原因。計算機在表示數(shù)的時候,會使用以下兩種狀態(tài)。
開關切斷狀態(tài)
開關連通狀態(tài)
雖說是開關,但實際上并不需要機械部件,你可以想象成是由電路形成的“電子開關”。總之,它能夠形成兩種狀態(tài)。這兩種狀態(tài),分別對應0和1這兩個數(shù)字。
… 0
… 1
1個開關可以用0或1來表示,如果有許多開關,就可以表示為許多個0或1。你可以
想象這里排列著許多開關,各個開關分別表示2進制中的各個數(shù)位。這樣一來,只要增加
開關的個數(shù),不管是多大的數(shù)字都能表示出來。
當然,做成能夠表示0~9這10種狀態(tài)的開關,進而讓計算機采用10進制計數(shù)法,
這在理論上也是可能的。但是,與0和1的開關相比,必定有更為復雜的結構。另外,請比較一下圖1-3和圖1-4所示的加法表。2進制的表比10進制的表簡單得多吧。
若要做成1位加法的電路,采用2進制要比10進制更為簡便。
不過,比起10進制,2進制的位數(shù)會增加許多,這是它的缺點。例如,在10進制中
2503只有4位,而在2進制中要表達同樣的數(shù)則需要100111000111共12位數(shù)字。這點從
表1-2中也顯而易見。
人們覺得10進制比2進制更容易處理,是因為10進制計數(shù)法的位數(shù)少,計算起來不
容易發(fā)生錯誤。此外,比起2進制,采用10進制能夠簡單地通過直覺判斷出數(shù)值的大小。
人的兩手加起來共有10個指頭,這也是10進制更容易理解的原因之一。
10進制的加法表
2進制的加法表
不過,因為計算機的計算速度非常快,位數(shù)再多也沒有關系。而且計算機不會像人類那樣發(fā)生計算錯誤,不需要靠直覺把握數(shù)字的大小。對于計算機來說,處理的數(shù)字種類少、計算規(guī)則簡單就好不過了。
讓我們來總結一下。
10進制計數(shù)法中,位數(shù)少,但是數(shù)字的種類多。
→對人類來說,這種比較易用。
2進制計數(shù)法中,數(shù)字的種類少,但是位數(shù)多。
→對計算機來說,這種比較易用。
鑒于上述原因,計算機采用了2進制計數(shù)法。
人類使用10進制計數(shù)法,而計算機使用2進制計數(shù)法,因此計算機在執(zhí)行人類發(fā)出的任務時,會進行10進制和2進制間的轉換。計算機先將10進制轉換為2進制,用2進制進行計算,再將所得的2進制計算結果轉換為10進制。
人類使用計算機進行計算的情形
轉換為2進制
轉換為10進制
10101 10011
使用2進制進行計算
101000
按位計數(shù)法
下面來介紹按位計數(shù)法。
什么是按位計數(shù)法
我們學習了10進制和2進制兩種計數(shù)法,這些方法一般稱作按位計數(shù)法。除了10進制和2進制以外,還有許多種類的按位計數(shù)法。在編程中,也常常使用8進制和16進制計數(shù)法。
●8進制計數(shù)法
8進制計數(shù)法的特征如下:
使用的數(shù)字有0、1、2、3、4、5、6、7共8種。
80的位、81的位、82的位、83的位……(基數(shù)是8)
21 19
40
●16進制計數(shù)法
16進制計數(shù)法的特征如下:
使用的數(shù)字有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16種。
160的位、161的位、162的位、163的位……(基數(shù)是16)
在16進制計數(shù)法中,使用A、B、C、D、E、F(有時也使用小寫字母a、b、c、d、e、
f)來表示10以上的數(shù)字。
●N進制計數(shù)法
一般來說,N進制計數(shù)法的特征如下:
使用的數(shù)字有0,1,2,3,…,N-1,共N種。
N0的位、N1的位、N2的位、N3的位……(基數(shù)是N)
例如,N進制計數(shù)法中,4位數(shù)a3a2a1a0為
a3×N3 a2×N2 a1×N1 a0×N0(a3、a2、a1、a0是0~N-1中的數(shù)字。)
不使用按位計數(shù)法的羅馬數(shù)字
按位計數(shù)法在生活中最為常見,因此人們往往認為這種方法是理所當然的。實際上,
在我們身邊也有不使用按位計數(shù)法的例子。例如,羅馬計數(shù)法。羅馬數(shù)字至今還常常出現(xiàn)在鐘表表盤上。
使用羅馬數(shù)字的鐘表表盤
還有,在電影放映的演職員名單中,也會出現(xiàn)表示年號的MCMXCVIII等字母。這也是羅馬數(shù)字。羅馬計數(shù)法的特征如下:
數(shù)位沒有意義,只表示數(shù)字本身
使用I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)來記數(shù)
將并排的數(shù)字加起來,就是所表示的數(shù)。
例如,3個并排的I(III)表示3,并排的V和I(VI)表示6,VIII表示8。羅馬數(shù)字的加法很簡單,只要將羅馬數(shù)字并排寫就可以得到它們的和。比如,要計算1 2,只要將表示1的I和表示2的II并排寫作III就行了。但是,數(shù)字多了可就不太簡單了。
例如,計算3 3并不是把III和III并排寫作IIIIII,而是將5單獨拿出來寫作V,所以6就應該寫作VI。CXXIII(123)和LXXVIII(78)的加法,也不能僅僅并排寫作CXXIIILXXVIII,而必須將IIIII轉換為V,VV轉換為X,XXXXX轉換為L,再將LL轉換為C,如此整理得到CCI(201)。在“整理”羅馬數(shù)字的過程中,必須進行與按位計數(shù)法的進位相仿的計算。
羅馬計數(shù)法中還有“減法規(guī)則”。例如IV,在V的左側寫I,表示5-1,即4(在鐘表表盤上,由于歷史原因也有將4寫作IIII的)。讓我們試著將羅馬數(shù)字的MCMXCVIII用10進制來表示。
MCMXCVIII=(M) (CM) (XC) (V) (III)=(1000) (1000-100) (1000-10) (5) (3)=1998
可以發(fā)現(xiàn),MCMXCVIII表示的就是1998。羅馬數(shù)字真是費勁啊!
指數(shù)法則
10的0次方是什么
在10進制的說明中,我們講過“1是100(10的0次方)”,即100=1。
也許有些讀者會產生以下疑問吧。
102是“2個10相乘”,那么100不就是“0個10相乘”嗎?這樣的話,不應該是1,而是0吧?
這個問題的核心在哪里呢?我們來深入思考一下。問題在于“10n是n個10相乘”這部分。在說“n個10相乘”時,我們自然而然會把n想作1,2,3…。因此,在說“0個10相乘”時,卻不知道應該如何正確理解它的意義。
那么,暫且拋卻“n個10相乘”這樣的定義方式吧。我們從目前掌握的知識來類推,看看如何定義100比較妥當。
眾所周知,103是1000,102是100,101是10。
將這些等式放在一起,尋找它們的規(guī)律。
103=1000102=100101=10100=?
1??101??101??10
每當10右上角的數(shù)字(指數(shù))減1,數(shù)就變?yōu)樵鹊?0分之1。因此,100就是1。綜上所述,在定義10n(n包括0)的值時可以遵循以下規(guī)則:
指數(shù)每減1,數(shù)字就變?yōu)樵瓉淼?0分之1。
10-1是什么
不要將思維止步于100之處。對于10-1(10的-1次方),讓我們同樣套用這一規(guī)則(指數(shù)每減1,數(shù)字就變?yōu)樵瓉淼?0分之1)。
100˙11
10_1˙
10110_2˙
100110_3˙1000
…
1??101??101??10
規(guī)則的擴展
首先讓我們做一個小結。我們學習了10n計數(shù)法的相關內容。起初,我們把n為1,2,3…時,即101,102,103…想作“1個10相乘”、“2個10相
乘”、“3個10相乘”……然后,我們拋卻了“n個10相乘”的思維,尋找到了一個擴展規(guī)則:對于10n,n每減1,就變成原來的10分之1。
當n為0時,若套用“10n為n個10相乘”的規(guī)則,著實比較費解。于是我們轉而求助于“n每減1,就變成原來的10分之1”的規(guī)則”,定義出100是1(因為101的10分之1就是1)。
同樣地,10-1,10-2,10-3…的值(即n為-1,-2,-3…時),也適用于這個擴展規(guī)則。
如此,對于所有的整數(shù)n(…,-3,-2,-1,0,1,2,3,…),都能定義10n的值。對于10-3來說,“-3個10相乘”的思維并不直觀。但倘若套用擴展規(guī)則,即使n是負數(shù),也能“定義出”10的n次方的值。
對20進行思考
讓我們用思考100的方法,也思考一下20的值吧。
25˙32
24
˙16
23
˙8
22
˙4
21
˙2
20
˙?
由此可知,對于2n來說,n每減1,數(shù)值就變成原來的2分之1。21的2分之1是20,那么20=1。在這里我想強調的是,不要將20的值作為一種知識去記憶,我們更需要考慮的是,如
何對20進行適當?shù)亩x,以期讓規(guī)則變得更簡單。這不是記憶力的問題,而是想象力的問題。請記住這種思維方式:以簡化規(guī)則為目標去定義值。
1??21??21??21??21??2
2-1是什么
讓我們參照10-1的規(guī)則來思考2-1。20除以2,得到的是2-1,即2-1=12。
“2的-1次方”在直覺上較難理解。鑒于規(guī)則的簡單化和一致性,2的-1次方可以定
義為2-1=21。同理,2-2=212,2-3=213。
綜上所述,可以總結出如下等式:
10 5=1×10×10×10×10×1010 4=1×10×10×10×1010 3=1×10×10×1010 2=1×10×1010 1=1×10100=110-1=1÷1010-2=1÷10÷1010-3=1÷10÷10÷1010-4=1÷10÷10÷10÷1010-5=1÷10÷10÷10÷10÷10
2 5=1×2×2×2×2×22 4=1×2×2×2×22 3=1×2×2×22 2=1×2×22 1=1×2
20
=12-1=1÷22-2=1÷2÷22-3=1÷2÷2÷22-4=1÷2÷2÷2÷22-5=1÷2÷2÷2÷2÷2
看了上面的等式之后,你應該就更能體會100和20為什么都等于1了吧。
到這里,我們給之前所說的“規(guī)則”取名為“指數(shù)法則”。指數(shù)法則的表達式為
=Na b
Na×Nb
即“N的a次方乘以N的b次方,等于N的a b次方”法則(但N≠0)。有關指數(shù)
法則的內容,在第7章也會談到。
0所起的作用
0的作用:占位
這節(jié)我們來討論0的作用。例如,用10進制表示的2503,它當中的0起到了什么作用呢?2503的0,表示十位“沒有”。雖說“沒有”,但這個0卻不能省略。因為如果省略了0,寫成253,那就變成另一個數(shù)了。
在按位計數(shù)法中,數(shù)位具有很重要的意義。即使十位的數(shù)“沒有”,也不能不寫數(shù)字。這時就輪到0出場了,即0的作用就是占位。換言之,0占著一個位置以保障數(shù)位高于它的數(shù)字不會產生錯位。
正因為有了表示“沒有”的0,數(shù)值才能正確地表現(xiàn)出來。可以說在按位計數(shù)法中0是不可或缺的。
0的作用:統(tǒng)一標準,簡化規(guī)則
在按位計數(shù)法的講解中,我們提到了“0次方”,還將1特意表示成100。使用0,能夠將按位計數(shù)法的各個數(shù)位所對應的大小統(tǒng)一表示成
10n
否則,就必須特別處理“1”這個數(shù)字。0在這里起到了標準化的作用。
如果從高到低各個數(shù)位的數(shù)字依次為an,an-1,an-
看完書以后覺得結城浩SAMA簡直是我的偶像,同時推薦他的《數(shù)學女孩》,本來是系列作品的,但大陸譯本只有一本,好坑!
復習了很多數(shù)學基礎,以后再也不敢說沒有實現(xiàn)不了的程序了,嘿嘿
它讓我對數(shù)學的概念有了明顯的改觀,最重要的是這導致我對數(shù)學產生了興趣
發(fā)貨速度太慢 包裝過于簡單 五本書就一塑料袋包裝
本書對程序員應該掌握的基本數(shù)學知識進行了深入淺出的講解,譯者水平挺高,文筆流暢!
作者寫的很淺顯易懂,從淺顯的數(shù)學知識中能體會到數(shù)學思維在編程中的重要性
程序員的數(shù)學思維很重要有木有,這么有趣的介紹幫助大大有木有,果斷有價值
不要害怕數(shù)學,從問題驅動的角度學習,更加有動力,也更清晰思路。
我是在新華書店看了這本書才買的。這本書寫的相當棒,如果再有一些習題看起來效果就更佳了。對于我這個數(shù)學功底不怎么樣的人來看,挺好的。
非常值得高中生和無數(shù)學基礎的蹩腳程序員看。給公司買了一本,準備也給兒子存一本,等他高中時再看。
書籍不錯,將程序員所必須的較為簡單的數(shù)學思想進行了闡述
好啊,可是我寫評價已經寫得厭煩了。每次買幾本書,看都沒怎么看呢,怎么評價?
很有趣的數(shù)學讀本,對數(shù)學的一些內容很有啟發(fā)~
從另外一個角度看數(shù)學,讓數(shù)學變得有趣,如果中學時代就讀過這本書的話,現(xiàn)在數(shù)學應該比較好了,受傳統(tǒng)教育的毒害深了
這是一本 培養(yǎng)編程愛好的書 沒有高深的講解 簡單易懂; 當然 他并不是學習編程的專業(yè)書籍 內容淺顯 非常適合初學者
日本的作者挺有意思的,略幽默。內容嘛,可以算是算法的學前教育嗎?我覺得在中國這本書大多數(shù)內容用不上這本書~因為中國教育太恐怖啦!
書籍印刷很好。內容也輕松易懂。適合中學生作為編程科普來閱讀。專業(yè)的做程序的學生,這書有些太簡單。或者讀著玩倒是可以。應該算是寫的不錯的書。
在書店早早翻過,當時就覺得很不錯。向來不喜歡枯燥的東西,這本書把枯燥的內容寫得很有趣,尤為難得的是在其中融入了對程序設計的思維映射,非常不錯。建議做開發(fā)的朋友們讀一下。
很值得程序員看的一本經典書籍,提高編程水平。
很適合編程入門的人看,而且介紹的都是編程思想中很實用的理論
程序員的數(shù)學還是很重要的,但是很多時候可能會發(fā)現(xiàn)沒有那么多的精力去專門完整的學習一門數(shù)學的學科,所以這本書正好是對我的胃口。
把道理說的簡單而且透徹,有助于深入理解數(shù)學
難得一見的講解基礎編程數(shù)學的好書,圖文并茂,清晰明了。
程序中的數(shù)學,數(shù)學中的程序,數(shù)學乃計算機的基礎
這本書在還沒閱讀的時候就已經對它產生了興趣,等我真正拿到手的時候更對它愛不釋手.它使一個對數(shù)學厭煩的人可以輕松的學習數(shù)學,而且內容清晰明了、易懂.對于初學者來說它是一個很好的幫手.
程序員的數(shù)學【一本為程序員朋友們寫的數(shù)學書】程序員的數(shù)學【一本為程序員朋友們寫的數(shù)學書】
正如這本書臨近結尾總結所言,數(shù)是一個龐大而復雜的事物,是人所不擅長的。因此,人類發(fā)明了計數(shù)法,但還不夠,于是有了邏輯、分組、算法,并能模式化。程序員所面對的就是不斷面對實際問題,繼承已有的解決方案,開辟新的解決路徑。