剛看到大家說的,稍微補充一下。1-計算機表示數的範圍計算機是使用二進位制表示的,簡單理解和十進位制一樣,如果是兩位數,那就是最小數是-99,最大數是99.2-計算機內數字的計算和表示計算機內數字是使用加法來計算減法運算的。簡單說,就是用到了補碼。以十進位制為例,任何一個負數和該數的絕對值的和都是零。比如,-5和5的和是零。計算機裡面用二進位制表示,最高位是符號位,0表示該數字是正數,1表示該數字是負數。負數,用該數與零的差值來表示,這就是補碼。例如,1000 1101,如何計算他的補碼?可以用0111 0011表示他的補碼,用他與1000 1101相加,就會得到零。即1 0000 0000,最高位的1溢位了,得到零0000 0000。所以可以看到,用補碼後就已經能夠使用加法計算減法了。由於最高位用來表示符號位,長度為n的二進位制位所表示的數字範圍就從0到2的n次冪,變為了-2的n-1次冪到2的n-1次冪減一。手機無法編輯公式抱歉呀。3-誤差的產生手機無法給大家演示程式碼,我就直接說了。比如,我們都知道,計算1000次0.1的和,結果應該是100.但是,如果我們使用C語言或者其他語言演示一下,發現結果並不是100,而是100.0000001這樣的一個數字。在計算機旁邊的同學可以演示一下。為什麼發生這樣的情況呢?因為計算機裡面用二進位制表示,所以,他們表示的負數就是這樣的,0.0010.0100.0110.1000.1010.1100.111那如何表示十進位制數的0.1呢?用二進位制去湊出來的!!!!不過,我們可以發現即使有無限的長度,也無法完整的湊出十進位制的0.1。大家也許會覺得計算機不完美,其實數學就是這樣呀!我們無法用十進位制完整地完美地表示1/3,是的,再多位也不行。數學是不完美的,人生更不是。在非常非常重要的場合如何表示小數呢?嗯,直接用一個整數表示就行了,比如135.96,直接用13596表示,參與後續計算就不會錯了。計算完,再除以100就好了。摩拜出現這樣的問題,就是計算過程出現了錯誤。前面有位同學說得非常好,這樣的錯誤最好,如果是出現了幾百的錯誤,那才是說不清道不明的。
剛看到大家說的,稍微補充一下。1-計算機表示數的範圍計算機是使用二進位制表示的,簡單理解和十進位制一樣,如果是兩位數,那就是最小數是-99,最大數是99.2-計算機內數字的計算和表示計算機內數字是使用加法來計算減法運算的。簡單說,就是用到了補碼。以十進位制為例,任何一個負數和該數的絕對值的和都是零。比如,-5和5的和是零。計算機裡面用二進位制表示,最高位是符號位,0表示該數字是正數,1表示該數字是負數。負數,用該數與零的差值來表示,這就是補碼。例如,1000 1101,如何計算他的補碼?可以用0111 0011表示他的補碼,用他與1000 1101相加,就會得到零。即1 0000 0000,最高位的1溢位了,得到零0000 0000。所以可以看到,用補碼後就已經能夠使用加法計算減法了。由於最高位用來表示符號位,長度為n的二進位制位所表示的數字範圍就從0到2的n次冪,變為了-2的n-1次冪到2的n-1次冪減一。手機無法編輯公式抱歉呀。3-誤差的產生手機無法給大家演示程式碼,我就直接說了。比如,我們都知道,計算1000次0.1的和,結果應該是100.但是,如果我們使用C語言或者其他語言演示一下,發現結果並不是100,而是100.0000001這樣的一個數字。在計算機旁邊的同學可以演示一下。為什麼發生這樣的情況呢?因為計算機裡面用二進位制表示,所以,他們表示的負數就是這樣的,0.0010.0100.0110.1000.1010.1100.111那如何表示十進位制數的0.1呢?用二進位制去湊出來的!!!!不過,我們可以發現即使有無限的長度,也無法完整的湊出十進位制的0.1。大家也許會覺得計算機不完美,其實數學就是這樣呀!我們無法用十進位制完整地完美地表示1/3,是的,再多位也不行。數學是不完美的,人生更不是。在非常非常重要的場合如何表示小數呢?嗯,直接用一個整數表示就行了,比如135.96,直接用13596表示,參與後續計算就不會錯了。計算完,再除以100就好了。摩拜出現這樣的問題,就是計算過程出現了錯誤。前面有位同學說得非常好,這樣的錯誤最好,如果是出現了幾百的錯誤,那才是說不清道不明的。