機械時代的計算

1、機械計算起源

????????最近在想平衡三進制的除法,想看看那么大牛是怎么做的,資料很少,但還是有的,有但是看不懂,也不知靠不靠譜,后面跟著實踐了能行,下面就看看Balanced Ternary Arithmetic,這個高德納(Donald Knuth)寫出有關平衡三進制的文章,而這思路又起源于巴貝奇的機械結構。

????????巴貝奇最牛的地方在于,他將人的數學計算,轉變成了機械可以運算的的題,在1834年的夏天到1836年期間,他給它的新引擎注入了令人贊嘆的功能,他設計了第一個自動裝置,可用于直接乘法與除法,它的除法過程也很特別,很震撼,他指出:“機器的算術運算,沒有什么比這更困難的了”,在查爾斯·巴貝奇的分析機出現后,也演變出了手搖或電動機械計算器,接下來看看Integer Long Division的文章,它們是如何實現除法的。


2、十進制機械除法

? ? ? ? 最簡單的除法就是減法,10/3就是10-3-3-3=1,所以就是商3余1,也就是累計可以減多少次,剩下多少就是余數,下面是以1234/38為例:

這種是不移位重復減法,注意了上面p是變成了負數的,然后又變了回來,為什么這樣做,是因為機械齒輪的設計,很難分辨數的大小,就算是能分辨,設計也很復雜,還不如一直減,直到負數停止,然后再回退上一步的結果,也就是結束后再加回去,它的運算過程:

  1. 清除寄存器【r】的結果
  2. 重復從【p】中減去【q】,每次都將1加到結果寄存器【r】中,直到【p】變成負數
  3. 撤消之前的減法,將【p】加上【q】,結果寄存器【r】減1,得到上一步的結果,除法完成:最終商在【r】中,余數在【p】中。

? ? ? ? 上面的方法,雖然簡單暴力,但是效率很差,舉一個極端的例子:100000000000/1,如果重復的相加那么手搖計算機,就變成的健身器材了,這并不是我們想要的,所以就有了第二版,有移位的減法,如下所示:

????????上述除法思路,用的還是巴貝奇的想法,根據結果采取適當的措施,即: 用試探性減法,直到結果為負數,而得到負號,就表示數字多了一個,通過加法恢復正確的數字,然后將商乘以10,重復進行減法運算;通過計算,每個階段在符號位變化前執行的減法次數,可依次生成除法結果的各位;也就是1234/38,不斷的在38后面加0,到2個位移<<,加2個0時,得3800,1234變成負數,然后撤消之前的減法,得到1個位移<,(即r左移1位變成00,q右移1位變成380),然后減1次就加-380,加到第4次時又變負數,撤消之前的減法,得到0個位移<,4變成3,商乘于10變成30,(即r左稱1位變30,q右稱1位得38),然后減1次就加-38,再次減負數,這時除法結束,最后一次撤消之前的減法(與原q相同,無移位),得到最后的商32和余數18,它的運算過程:

  1. 清除寄存器【r】的結果
  2. 通過將【q】向左移并用移位機制(s)跟蹤,將【q】的最高位與【p】的最高位對齊
  3. 反復從【p】中減去【q】,每次都在結果寄存器【r】中加1,直到【p】變成負數
  4. 通過【p】加回【q】,并將【r】減1,撤消之前的減法。看【q】是否要移位;若是,則將【r】左稱1位,將【q】右移1位,回到步驟3繼續開始。
  5. 否則,【q】不再移位,則除法完成,最終商在【r】中,余數在【p】中。

3、平衡三進制除法

? ? ? ?最終講這一部分了,這個是高德納寫的,符號他直接采用了-1、0、1,這個排版起來,不太好看懂,下面我還是用+\0\-來說明,如下圖所示:

? ? ? ? 這個平衡三進制除法很特別,首先,將被除數分成兩個向量 p 和 s,其中 p 的位數最多與除數 (q) 相同,s 是剩余位數的向量;比如,這+-++-(十進制65)?/+--(十進制5),也就是p為+-+,s為+-,而除數q為+--,然后就是除數q乘于(+或-)與被除數p相減(實際上相減1次或2次),直到p位于一個半封閉區間內(上圖可知),每一步的結果(+或-),都要加到r上去,當 p 減少到位于 q 所限定的區間內時,結果乘以 3(通過附加0)并將 s 的下一位數字轉移到 p。當 s 用盡時,結果 r 和被除數 p 構成最終的商和余數。


? ? ? ? 說實話是不是,看不懂了,沒事剛開始我也看不懂,寫多兩題就懂了,先要清楚它的半封閉區間,它的區間是由除數構成的,也就是p是正數時,0<=p<5這區間,當p是負數時,0>=p>(-5)這區間,如下圖右下角的區間示意圖;它的運算過程,就是將【p】減去【q】,然后判斷【p】是否在這兩個半封閉區間內,不是則繼續減,實際只要減去1次或2次就可以了,符合后將 s 的下一位數字轉移到 p中,結果乘于3(通過附加0),這也非常簡單的,下面就用+-++-(十進制65)?/+--(十進制5)例子,計算如下:

????????共算了三步,每一步,都只相減了1次,也就是+-(十進制2),當p與q符號相同時上+,反之上-,它們相減等于加上它的相反數,而余數2是在這兩個半封閉區間內,所以就可以轉移s,當s都移完了,就可以得商+++(十進制13)和余數0。


此方法是通用的,下面繼續算10/-2,如下圖所示:

在上圖中,符號不同則上了-,然后第一輪相減得1,符合半封閉區間,進行下一輪,r的-變-0,然后+變++,與-+相減1次得2,但半封閉區間不包含2,所以要再相減1次得0,符合半封閉區間,s用完,結果即(-0)+(-+),得到-++(十進制-5)和余數0,結果正確。? ?


下面,再來一題:+0++0+(十進制280)/+0-(十進制8)

這個最有用的就是提醒你,什么時候是上0,而不是只上+或-,也就是當s的位數移過來時,并沒有相減時,也符合半封閉區間,所以就上0了,雖然上0了但移位還是要的,這里有4個步驟,所以結果是++0-(27+9+0-1=35)和余數0,結果正確。


最后,來2道簡單的,4/2及9/2,如下圖:

這文章Balanced Ternary Arithmetic中還有很多有趣方法,比如快速除于3的方法等,細細品讀,你會獲得不一樣的收獲,比如頭頂掉落的一撮毛。。。

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

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

相關文章

相機光學(四十八)——漸暈

1.什么是漸暈 漸暈&#xff0c;又稱“光衰減”&#xff0c;在光學和攝影中很常見&#xff0c;簡單來說就是與中心相比&#xff0c;圖像角落變暗。漸暈要么是由光學引起的&#xff0c;要么是在后期處理中故意添加的&#xff0c;目的是將觀看者的視線從角落的干擾物吸引到圖像的中…

LabVIEW多通道阻抗測試儀

LabVIEW集成 Keysight 數字萬用表與 NI 矩陣開關卡&#xff0c;構建多通道阻抗測試系統&#xff0c;實現設備連接電纜的多芯阻抗自動化測試&#xff0c;涵蓋數據采集、分析、記錄與顯示功能&#xff0c;適用于高精度阻抗檢測場景&#xff0c;展現LabVIEW在儀器控制與自動化測試…

MySQL的5.0和8.0版本區別

目錄 1、MySQL版本-- 》5版本 1.1、InnoDB存儲引擎 1.2、存儲過程和觸發器 1.3、視圖 1.4、增強的查詢優化器 1.5、增強的索引支持 1.6、外鍵支持 1.7、分區表和分布式查詢 2、MySQL版本-- 》8版本 2.1、性能 2.2、字符編碼改變 2.3、持久化保存 2.4、隱藏索引和降…

python實現簡單的地圖繪制與標記20250705

用python語言繪制顯示范圍不大于上海地區的地圖 您的代碼實現了一個 上海武館地理信息系統&#xff0c;主要功能是通過可視化地圖展示上海各區的傳統武術館信息。 通過和deeps對話一晚上實現的&#xff0c;我就是描述修改 高德的api key我搞了一會&#xff0c;平時很少接觸密…

Qt開發:QListWidget的介紹和使用

文章目錄 一、QListWidget的簡介二、QListWidget的基本用法三、QListWidget的數據操作2.1 插入數據2.2 查找數據2.3 選項設置 四、QListWidget的信號與槽 一、QListWidget的簡介 QListWidget 是 Qt 框架中用于顯示和操作條目列表的控件&#xff0c;它是 QListView 的一個子類&a…

React Native 親切的組件們(函數式組件/class組件)和陌生的樣式

寫多了taro, 看見react native中的組件好親切啊&#xff0c;幾乎一模一樣。 一、函數式組件 — 常用 1&#xff09;無狀態&#xff0c;每次刷新都是生成一個新的狀態 2&#xff09;基于狀態變化的管理 3&#xff09;簡潔&#xff0c;代碼少&#xff0c;易于服用 import Reac…

Spring boot之身份驗證和訪問控制

本文筆記跟隨于遇見狂神說老師的視頻 一.SpringSecurity&#xff08;安全&#xff09; 1.相關概念 在web開發中&#xff0c;安全第一位&#xff0c;有簡單的方法&#xff0c;比如&#xff1a;攔截器&#xff0c;過濾器 也有安全框架&#xff0c;比如&#xff1a;SpringSecu…

C#使用開源框架NetronLight繪制流程圖

之前使用MindFusion.Diagramming繪制流程圖確認很方便&#xff0c;只能試用版&#xff0c;如果長期使用&#xff0c;需要收費。 C#使用MindFusion.Diagramming框架繪制流程圖(2):流程圖示例_c# 畫流程圖控件-CSDN博客 這里找一個簡易開源框架NetronLight&#xff0c;GIT下載地…

支持向量機(SVM)在腦部MRI分類中的深入應用與實現

?? 博主簡介:CSDN博客專家、CSDN平臺優質創作者,高級開發工程師,數學專業,10年以上C/C++, C#, Java等多種編程語言開發經驗,擁有高級工程師證書;擅長C/C++、C#等開發語言,熟悉Java常用開發技術,能熟練應用常用數據庫SQL server,Oracle,mysql,postgresql等進行開發應用…

AtCoder AT_abc413_c [ABC413C] Large Queue 題解

題目大意 有一個初始為空的序列 A A A&#xff0c; Q Q Q 次操作分為兩類&#xff1a; 第一類&#xff1a;將 c c c 個 x x x 放到 A A A 的末尾。第二類&#xff1a;將前 k k k 個數的和輸出并移除它們。 思路 這是一個求和問題&#xff0c;想到的第一個思路是前綴和…

「源力覺醒 創作者計劃」_文心大模型開源:開啟 AI 新時代的大門

在人工智能的浩瀚星空中&#xff0c;大模型技術宛如一顆璀璨的巨星&#xff0c;照亮了無數行業前行的道路。自誕生以來&#xff0c;大模型憑借其強大的語言理解與生成能力&#xff0c;引發了全球范圍內的技術變革與創新浪潮。百度宣布于 6 月 30 日開源文心大模型 4.5 系列&…

Git 怎么判斷是否沖突?

&#x1f4cc; [Q&A] Git 怎么判斷是否沖突&#xff1f; Git 使用的是三路合并算法&#xff08;Three-way Merge&#xff09;&#xff0c;它比較&#xff1a; 共同祖先提交&#xff08;base&#xff09; 當前分支的改動&#xff08;ours&#xff09; 被合并分支的改動&am…

在sf=0.1時測試fireducks、duckdb、polars的tpch

首先&#xff0c;從https://github.1git.de/fireducks-dev/polars-tpch下載源代碼包&#xff0c;將其解壓縮到/par/fire目錄。 然后進入此目錄&#xff0c;運行 SCALE_FACTOR0.1 ./run-fireducks.sh&#xff0c;腳本會首先安裝所需的包&#xff0c;編譯tpch的數據生成器&#x…

AWS多賬號管理終極指南:從安裝配置到高效使用

引言:為什么需要多賬號管理? 在云計算時代,企業使用多個AWS賬號已成為最佳實踐。根據AWS Well-Architected Framework,多賬號架構可以: 實現環境隔離(生產/測試/開發)滿足不同業務單元的安全要求簡化資源管理和成本分配符合合規性要求(如SOC2、ISO27001)本文將手把手…

UE5音頻技術

1 . 調制器 Modulator 調整參數 調制器可以使聲音每次音高都不一樣 2. 隨機 節點 3. 混音器 Mixer 混合兩個音頻 4. 串聯器 Concatenator 按循序播放 5.多普勒 Doppler 根據距離音頻變化 6.包絡線 Enveloper 武器充能發射 7.混響

創客匠人視角:創始人 IP 打造與知識變現的培訓賦能體系

在知識付費行業進入精耕期的當下&#xff0c;為何部分企業投入大量培訓卻收效甚微&#xff1f;創客匠人 CEO 老蔣通過服務 5W 知識博主的經驗指出&#xff1a;唯有將創始人 IP 思維與培訓體系深度融合&#xff0c;才能讓培訓成為知識變現的 “轉換器”。一、內訓體系重構&…

基于Java+SpringBoot的三國之家網站

源碼編號&#xff1a;S591 源碼名稱&#xff1a;基于SpringBoot的三國之家網站 用戶類型&#xff1a;雙角色&#xff0c;用戶、管理員 數據庫表數量&#xff1a;20 張表 主要技術&#xff1a;Java、Vue、ElementUl 、SpringBoot、Maven 運行環境&#xff1a;Windows/Mac、…

推薦算法系統系列五>推薦算法CF協同過濾用戶行為挖掘(itembase+userbase)

注&#xff1a;此文章內容均節選自充電了么創始人&#xff0c;CEO兼CTO陳敬雷老師的新書《GPT多模態大模型與AI Agent智能體》&#xff08;跟我一起學人工智能&#xff09;【陳敬雷編著】【清華大學出版社】 配套視頻 推薦算法系統實戰全系列精品課【陳敬雷】 文章目錄 推薦算…

pytest之fixture中yield詳解

1. fixture——yield介紹 fixture的teardown操作并不是獨立的函數&#xff0c;用yield關鍵字呼喚teardown操作。前面通過fixture實現了在每個用例之前執行初始化操作&#xff0c;那么用例執行完之后&#xff0c;如需要清除數據&#xff08;或還原&#xff09;操作&#xff0c;…

Nginx 動靜分離原理與工作機制詳解:從架構優化到性能提升

前言&#xff1a;在 Web 應用架構不斷演進的今天&#xff0c;如何高效處理日益增長的訪問量和復雜的業務邏輯&#xff0c;成為開發者必須面對的挑戰。當我們在瀏覽器中打開一個網頁&#xff0c;那些直觀可見的 HTML 頁面、精美絕倫的圖片、流暢運行的 JavaScript 腳本&#xff…