簡體   English   中英

如何在只有32位int的系統上模擬256位整數數學運算?

[英]How do I emulate 256-bit integer math ops on a system with only a 32-bit int?

我想使用一系列(無符號)整數編寫一個deadsimple bignum類。 我可以大致看到加法和減法如何工作,但是除法和乘法是另一回事。 我知道32位編譯器可以通過將int64分為兩個int32來消除64位int。 我正在尋找一種有效的方法來做到這一點。

我想要C ++代碼,而不是匯編代碼。 速度不是主要問題,但最有效的解決方案始終是組裝而已。

也許可以作為起點。 它使用以65,536為基數的表示形式實現最多2,048位無符號整數。 這意味着每個數字都適合16位,並且我們只需使用32位作為結果就可以輕松檢測溢出(即使是相乘)。

但是,這是C代碼,但移植到C ++應該很簡單,或者只是作為啟發。 它針對可讀性而不是速度進行了很大的優化,因為這並不是我擅長的。 :)

您最好看一下任意精度算術 ,它將解釋比起您的代碼正在運行的處理器,仿真更高精度處理器的過程背后的想法。

在C ++上購買一本精裝書,叫做《 NUMERICAL REIPES》,您會在第20.6頁的頁面p916到p925上找到所需的內容。

僅使用long long什么問題? 保證至少為64位。 否則,您的Knuth(第2卷)應提供基本算法。

使用簡單的字節數組。 您可以隨意設置整數大小*。 您只需要二進制操作並考慮字節序(您的位將是7-6-5-4-3-2-1-0-15-14-13 ...)

* RAM有限

對於任意大小,請嘗試一下GMP ,如果由於某種原因您不能依靠編譯器為您做這件事,那么它也可以在32位上用於64位數學運算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM