用Rust寫平衡三進制除法器

1、除法的本質

????????除法的本質是減法,也就是一個大的數減去一個小的數,比如:10/2,也就是10-2-2-2-2-2=0,所以商5余0,10/3,也就是10-3-3-3=1,所以商3余1,這也是很常見的方法,但如果引入負數,情況又會有些變化,分成4種總結為2種:

10/2=10-(2*1)-2-2-2-2=0? 商5余0,

-10/-2=-10-(-2*1)+2+2+2+2=0?商5余0,

10/-2=10-(-2*-1)-2-2-2-2=0?商-5余0,

-10/2=-10-(2*-1)+2+2+2+2=0?商-5余0,

????????通過上面示例,可看出雙正雙負,得的商是正數,而一正一負,得的商是負數,仔細看10/-2及-10/2這兩個例子,拿10/-2舉例,10-(-2)=12越來越大了,與實際情況不符,所以要乘于-1即,10-(-2*-1)=8與實際情況相符,所以商是負數正確;對于平衡三進制同樣適用,被除數與除數相減后變余數,被除數(余數)與除數同種符號,上1反之上T,這樣才能保證兩者越來越趨向于0,所以最簡單粗暴方法就是,用減法來做加法 ,詳情請看:二進制如何做除法?及?平衡三進制四則運算?文章。

2、平衡三進制除法器:減法器版

? ? ? ? 平衡三進制的好處就是對稱,但也特別的有特點,比如它的減法器,在平衡三進制加法器中它是正向進位的,而減法器它可以負向進位,你沒聽錯是負向進位,當初的我算也不會算,后面得益于我的初中知識,有公式:被減數 +?取反的要減數=? 被減數 - 要減數,即12-6=6相當于12+(-6)=6,負負得正了,這確很方便了,只要被減數加上取反的要減數,就可以得到結果,但其實它的減法表也是可以用,不過太反直覺了,并不建議使用,減法器版除法器,原理如下所示:

? ? ? ? 可得代碼:不想寫了


3、平衡三進制除法器:試商版

? ? ? ? 說實話,其實這才是最常用的,就像10/2=5,沒人會10-2-2-2-2-2=0這樣算,但對于平衡三進制來說,不理解它的話,這樣是最簡單的,用十進制的試商方法,剛開始算了很多次,都無從下手,不是結果不對,就是不知道商是+0-,直到我看到了這文章托馬斯·福勒的三元計算機,才知道這還真能算,我差點就覺得它壓根算了,但它實現是太規整,如下圖所示:

????????它算的是280/5=35,過程很清楚,即216+72+0+8=280,中間結果余數是允許有負的,就像上面的-8,這里有三個點要注意,首先是減法太麻煩了,當商上+時,應是寫成(+0++0+)-(+0-000),現在變成了(+0++0+)+(-0+000),這就是相減變成加上它的相反數,所以商為+時,出相反數,商為-時,直接照樣寫;然后就是對位要齊,若對不齊就會導致算錯,這里+0-后面,跟了多少個0,每多1個0,那就要多乘3,可出列表格:

平衡三進制數十進制?
+0-000216(8*3*3*3)
+0-0072(8*3*3)
+0-8

還有就就是商要怎么上,就是要余數趨于0,規則如下所示:

被除數(余數)與除數互為相反數,商就上-?;

中間結果移動了兩位數字,上0先對齊;

當被除數(余數)與除數的符號,都為正數或負數,商就上+;

感覺學會了,下面來用一下吧,比如10/2和4/2的平衡三進制除法:

沒想到吧,10/2可以取18這個數,比10都大,但是結果就是正確的,其它都不行,這是怎么想到的,也就是+-后面加0,即+-為2、+-0為6、+-00為18,商是+--,所以結果是18-6-2=10,也就是10-18+6+2=0;同樣的,4/2相當于4-6+2=0,商就是+-,6不6,太難算了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86958.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入探索WordPress Multisite:構建與管理多站點網絡

隨著互聯網的快速發展,越來越多的企業和個人開始使用內容管理系統來搭建和維護自己的網站。WordPress作為全球最受歡迎的CMS之一,因其強大的功能和靈活性,成為了許多網站管理員的首選平臺。而在一些特定需求的場景下,WordPress Mu…

.Net Core 獲取文件路徑

在 .NET Core 中獲取文件路徑的方法取決于你要獲取的文件的位置和上下文。這里將介紹幾種常見的方式來獲取文件路徑。 1. 獲取當前工作目錄 你可以使用 Directory.GetCurrentDirectory() 方法來獲取當前工作目錄的路徑: using System; using System.IO; class P…

順序表整理和單項鏈表01 day20

二:各個主要函數 一:CreatSeqList SeqList *CreateSeqList(int len); -------------------------------------------------------------/*** brief Create a Seq List object 創建一個順序表** param n 是順序表的大小* return SeqList* 指向順序表的…

電商導購app平臺的緩存策略與性能優化方案:架構師的實踐經驗

電商導購app平臺的緩存策略與性能優化方案:架構師的實踐經驗 大家好,我是阿可,微賺淘客系統及省賺客APP創始人,是個冬天不穿秋褲,天冷也要風度的程序猿! 緩存策略的重要性 在電商導購APP平臺中&#xff…

學習C++、QT---12(C++的繼承、權限對繼承的影響)

每日一言 你的價值,由你自己定義,無需他人評判。 C的繼承 直接上案例 繼承是什么意思呢,就是我本來這個類我叫他基類、我希望創建我的下一個類有我這之前的類的屬性和方法,那么我如果不用繼承的話,就需要多寫很多一樣…

(6)Wireshark的TCP包詳解-上篇

1.簡介 上一篇中通過介紹和講解,應該知道要講解和介紹的內容在哪里了吧,沒錯就是介紹OSI七層模型的傳輸層。因為只有它建立主機端到端的連接如:TCP、UDP。 2.TCP是什么? tcp是工作在傳輸層,也就是網絡層上一層的協議。 它是面…

太極八卦羅盤JS繪制

LeaferJS 是一款好用的 Canvas 引擎,通過LeaferJS繪制羅盤案例. https://www.leaferjs.com/ui/guide/ 示例 太極八卦羅盤 直接上代碼 <template><div id"LuoPan"></div><div id"info"><p>屏幕寬度: {{ screenWidth }}px<…

Python開源項目月排行 2025年5月

#2025年5月2025年6月1日1scrapy一個開源的、基于 Python 的高性能網絡爬蟲和數據抓取框架。Scrapy 項目最初由倫敦的網絡聚合和電子商務公司 Mydeco 的員工以及烏拉圭蒙得維的亞的網絡咨詢公司 Insophia 的開發者共同創建。目前&#xff0c;Scrapy 由 Zyte&#xff08;原名 Scr…

Debezium日常分享系列之:在 Kubernetes 中使用 Debezium 的 CDC

Debezium日常分享系列之&#xff1a;在 Kubernetes 中使用 Debezium 的 CDC 架構源數據庫創建數據庫憑證密鑰Debezium 自定義鏡像構建并推送鏡像Kafka Connect 集群Debezium Postgres 連接器Debezium 創建的 Kafka 主題 Debezium 是一個開源的分布式變更數據捕獲 (CDC) 平臺。D…

tf serving和torch serve哪個耗時更低

TensorFlow Serving&#xff08;TF Serving&#xff09;和 TorchServe 的耗時對比需結合具體場景&#xff08;如硬件配置、模型類型、優化策略等&#xff09;&#xff0c;以下從多維度分析兩者的性能差異及適用場景。 ?? 1. 標準性能基準對比 根據公開壓測數據&#xff08;…

Java面試寶典:基礎六

133. 二進制小數點位移 答案:C(乘以2) 解析: 原理:二進制小數點右移一位等價于乘以 (2^1)(左移則除以 (2))。示例: 101.1(5.5)右移 → 1011(11)驗證:(5.5 \times 2 = 11)說明:位移前:1 0 1 . 1 (值 = 2+2?+2? = 5.5) 位移后:1 0 1 1 . (值 = 2+2+2? =…

04-React中綁定this并給函數傳參的幾種方式

前言綁定 this 的方式一&#xff1a;bind()綁定 this 并給函數傳參 的方式二&#xff1a;構造函數里設置 bind()綁定 this 并給函數傳參 的方式三&#xff1a;箭頭函數【薦】 前言 我們先來看下面這段代碼&#xff1a; components/MyComponent.jsx import React from "…

Docker拉取不兼容的鏡像解決辦法

錯誤提示如下&#xff1a; WARNING: The requested images platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested295ef35cfefe0dce6904e017e89218695d9a9c092b45496218f4476357be4f9c 這個警告表明你…

android14 未充電狀態電量低于15%彈框提示 10%直接關機

上層接收電量變化廣播&#xff0c;添加未充電判斷&#xff0c;做出彈框或關機動作 SystemUI\src\com\android\systemui\power\PowerUI.java Overridepublic void onReceive(Context context, Intent intent) {String action intent.getAction();if (PowerManager.ACTION_POWE…

ASP.NET Core 中 Kestrel 的應用及在前后端分離項目中的角色

目錄 一、Kestrel 基礎&#xff1a;輕量級且高性能的 Web 服務器 二、前后端分離項目架構&#xff1a;Vue、.NET Core API、Nginx 與 Kestrel 2.1 交互流程圖 2.2 流程詳解 三、Kestrel 在架構中的核心作用 四、launchSettings.json 與 Kestrel 配置的關系及底層機制 4.1…

Kotlin 退出循環總結

文章目錄 Kotlin 退出循環總結for循環forEach()嵌套for循環lambda函數inline函數 Kotlin 退出循環總結 for循環 for ((index, value) in list.withIndex()) {if (value "c") {break // 退出循環}println("$index - $value") }// 0 - a // 1 - bfo…

再看C語言

目錄 與Java的差異化 編程范式 跨平臺 編譯過程 包管理 基本類型 內存結構 重點掌握 進制、字節與計算 指針 結構體 關鍵詞 動態內存 模塊化 高級特性 動態鏈接 虛擬內存 打包編譯 并發編程 現在需要參與到存儲軟件開發工作&#xff0c;存儲層比較接近OS系統…

機器學習入門 | 訓練、推理與其他機器學習活動(預處理、測試與評估)

在訓練階段&#xff0c;訓練算法通過優化目標/損失函數在訓練數據集上的表現&#xff0c;不斷更新模型參數θ。在監督學習場景中&#xff0c;訓練數據集由輸入-標簽對&#xff08;真實輸出值&#xff09;組成。目標函數應當獎勵模型根據訓練輸入成功預測真實輸出的行為&#xf…

Node.js特訓專欄-實戰進階:11. Redis緩存策略與應用場景

&#x1f525; 歡迎來到 Node.js 實戰專欄&#xff01;在這里&#xff0c;每一行代碼都是解鎖高性能應用的鑰匙&#xff0c;讓我們一起開啟 Node.js 的奇妙開發之旅&#xff01; Node.js 特訓專欄主頁 專欄內容規劃詳情 Redis 緩存策略與應用場景&#xff1a;從理論到實戰的高…

【stm32】HAL庫開發——Cube配置基本定時器

目錄 一、Cube配置基本定時器 1.定時器CubeMX配置介紹 2.定時器中斷控制LED 3.定時器常用函數 4.定時器從模式&#xff08;Reset Mode&#xff09; 5.定時器的從模式&#xff08;Gated Mode&#xff09; 6.定時器的編碼器接口 一、Cube配置基本定時器 1.定時器CubeMX配置…