計算機是如何進行整數計算和小數計算 包過無窮小數

時間 2021-06-09 05:56:39

1樓:dovisutu

emm...很難在乙個回答裡說完,因為這真的太複雜了...

不過一點是確定的:肯定不是模擬珠子

首先,萬物皆2進製(在計算機裡)

整數就直接變成2進製就可以了,全加器的搭建很好做,用上補碼就可以做減法了,堆疊全加器(並行)//移位寄存(序列)可以做出乘除(整數)

一般我們就直接分配16//32//64bit儲存,用不了多少;但是太大的也可以用上BigInteger有多大分配多大(當然,直到記憶體溢位為止)

這裡的運算都是硬體層面的,不吃記憶體,速度也賊快

但是,小數呢?

小數的表示就開始不一樣了...

我們一般看到就會想到101.11101這樣的方式,但是小數點怎麼點又是個問題。

定點數,就是固定住小數點前//後只有幾位,用到的地方都統一的情況下就沒有確定點的開銷

浮點數,可以表示更小更大的數,精度可變,就是需要通過某些方式存下小數點的位置

當然,需要標準吧。比如IEEE 754 Floating Point Arithmic Standard就是一套完善的浮點數標準。

至於計算...這就有點麻煩了

我其實不知道用上這個標準的浮點數加減電路是怎麼做的...這也是其麻煩的地方:做起來太難,不如定點數好做

不過沒事,反正cpu廠商已經把四則運算以及各種奇奇怪怪的運算(比如fma, expm)做進其中的ALU(Arithmic Logic Unit)中,只管呼叫就可

反正還是賊快

無窮小數這個有點棘手了...

一般的格式由於進製限定,儲存的永遠是有限小數,即其近似,就有了(1/3)[=] *3 != 1這種奇怪案例

而如果是無限迴圈小數,就是有理數,完全可以設計乙個格式把分子存前面,分母存後面

而四則運算不過加減乘除,按照運算規則直接算就好

不過,我還沒有聽說過硬體支援rational的cpu,所以只能退到軟體

軟體層面乘除,呼叫兩次指令也挺快的,用上vectorization可以壓縮到乙個指令

但是...加減要通分,結果要約分。

最大公約數/最小公倍數真的可以直接輾轉相除(相模?)求出來,但是有點慢。硬體層面的輾轉相除快得多,如果有支援那就是最好的

可是無限不迴圈小數.......對不起,可能不行

如果只是代數數還好就是一堆根號巢狀,拆根號比較麻煩,但還是可以做到的

到了超越數,就完蛋了。這裡面有很多數(可以證明是無窮多數)不能用有限的符號表示,而用上無限多符號無論怎樣都會炸記憶體

但是那些有限符號呢?其化簡等等就是乙個大難題。所以...這個沒辦法,或許可以縫縫補補又三年,但是我是不可能做出來(也沒想過去做)。

最後:要不然,連我們現在做到的都做不到。

為什麼不把ieee754貼上來?

很簡單,因為那玩意有70頁,還不包括硬體細節

這就是計算機強大的部分原因,因為其很複雜,但我們(一些人)不需要知道底層原理,只管用就好,有人處理這些事情(當然不是人算!)

非計算機專業,計算機如何入門?

不懵傘 Fangxun 的推薦,親測有效。Crash Course.我是乙個不接觸計算機專業的人。現在,機械人都要發展起來了。我才不相信電子智慧型是什麼神奇魔法呢!所以,去看了Crash Course。它告訴我,是Computer Science.原來就是一堆電路。大道至簡。的確很神奇! 高讚答案已...

計算機如何使用0與1進行數學計算

Joooooel Bo 0和1就是一種二進位制 數制只是一種載體,十進位制的事二進位制為什麼做不了?不要侷限於思維定式,二進位制只是數制的另一種形態,表達的實體是相同的 而在計算機中,其實和我們在現實中計算是乙個道理,但是計算機記憶體是有限的,只能儲存有限位的0和1,所以表示精度是有限的。但是我們日...

非計算機專業如何進入遊戲行業

汪老溼 年輕人,看得遠一點,再遠一點 遊戲行業裡,除了研發大部分是計算機專業,其他那麼多崗位呢 策劃 運營 美術 測試 客服 商務等等 進入遊戲行業未必一定要是計算機專業 汪老溼 小白如何進入遊戲行業 遊戲HR幾點建議 研發團隊崗位劃分 從長遠發展的角度來看,遊戲行業或者說網際網路行業的研發團隊分為...