引用:
作者沒問題
本來是不想回的,不過,還是有幾點要說一下。
一、不管多大位數的被除數,你都要先假設,如果你的除數是一,那你的計算次數就是由被除數決定,雖然答案很明顯,但是電腦沒這麼聰明。
二、你說對一部份,大部份的時候,是除數決定計算的次數,當遇到很小的除數時「千位或萬位的除數」,你確實可以用乘法先去算乘積,但是當你的除數多達七十幾位到一百位的時候『還包含五十位小數』,這對電腦來說也是很痛苦的。
三、有人可能沒經歷過那個古早時代的電腦計算,當年最大的被除數最多也只能表示到正負三萬二千七百六十七。想一下,你要怎麼計算阿波羅計劃的地月軌道?
四、為什麼總是要增加這麼多步去計算乘法?那是因為除法很明顯沒有快速計算的解,所以你就算在網上能找到的計算方式絕大多數都是先算乘法。
五、當你的數大於二十一位以後,就算你用現代的超算,你的計算時間也是指數級的提升。或許你一...
|
這麼看來你根本就不懂電腦怎麼運行大數除法的。 或者以我的經驗來看,你沒有學過電腦程式類的課程。
大數,不管你是整數還是單/雙精度浮點數,超過宣告位數上限的數字通常使用矩陣(或是串列)來存放,有些語言比如R,用串列來記錄位數是那更方便(一個串列的長度大概是可以有約130位元吧,太久沒用了,忘了,你的位數比較大的話,兩個串列也就夠了。)把串列裡面的數值根據除數長度拆出來然後作除法然後根據餘數的位數再取合適的串列繼續除,
你口中所謂的幾百位元除法我想我的程式應該都幾分鐘內就除完了。
這種處裡大數字方法應該在很早以前人們就知道了,以我來說早在我讀書時,那時做數值分析的函式庫 IMSL 或是一般的教科書 Numerical Recipes in Fortran這類的書籍裡面都有,優化過後的程式碼都在書裡,你網路上找一下隨便都找得到。
除法要平行運算? 這程式我倒是沒寫過,直覺是不行。畢竟除法有次序性,後續的除法會依賴前一次的餘數。不過比如你要做64題的除法運算,是可以很簡單的寫一個程式一次把64個問題分別送到64台電腦或是64個核心去做計算,這就可行,網路上隨便找都有相關的程式碼( 關鍵字 mpich)。
另外,除法其實是減法(當然你也可以說除法是乘法,乘上倒數即可,隨便),你不愛除法其實也可以不斷地計算減法,減到不能減的減法次數就是商。(這些其實我前面說的書裡面,都有介紹,)
有小數的話,也不影響,你想要求到小數點後比如n位,粗略地來說(後續的說法可能不精準)把你的被除數後面多上n個0,然後作除法,除完以後最後n位就是小數點後的位數了。
比如說 23/7 = 3.285714
你的運算只能求到3但你想算到小數點後一位,你可以計算
230/7 =32
這樣就得到小數點後第一位了。
簡單來說我完全不認同你所謂的 "當你的數大於二十一位以後,就算你用現代的超算,你的計算時間也是指數級的提升"。 請你尊重一下電腦的發展好嗎,現在計算40位的整數除法運算通常也不用1秒。即使再多10位到50位數,也不用1秒,哪來你說的現代的超算 ? 我只用i5的個人電腦好嗎。(我測試到60位數都是enter按下去以後直接有答案)