













加油加油??哈哈哈??(???*)
好的,那之前的小學中我們探討了定點數的原碼和補碼的乘法如何實作,從這個學期開始我們要來探討定點數的除法運算如何實作,首先我們會介紹除法運算的思想,接下來會介紹原始碼的兩種除法實作方法,一種要恢復余數法,一種要不恢復余數法又叫加減交替法,那在下一個視頻當中,我們又會介紹無碼的除法啊,也是采用加減交替法的一個思想好,那首先來看一下大家熟悉的實際之處,法0.211÷0.985,那小時候我們做這樣的除法,首先是會把這兩個數的小數點進行一個處理,統一的向右移,三位小數點右移三位,那么就會變成211÷985,那這個除法大家都很熟悉了,那第1個商戶們只能上0,因為我們上的這一位商和除數進行相乘之后,得到的這個結果不能大于當前的這個被除數好,這樣我們可以得到一個余數211,并且在這個余數的后面添一個0,接下來第2步我們可以商2因為二者,那第2步我們可以商2,因為2×985剛好是不大于2110,但是又最接近2110的一個數值,所以這樣得到1970再和之前的這個余數進行一個相減,得到一個三位的余數,接下來再在末位添一個零噢,那后續的都一樣,總之每一步我們上的這一位商和除數的相乘的乘積,要盡可能的接近當前的余數,但是又不超過當前這個余數哦,那如果我們最終追求的這個傷只精確到小數點后面三位的話,啊,最侄訓留下一個余數210號,那現在問題是這樣的,大家有沒有想過為什么我們除法的豎式啊,小時候學的這種除法的豎式要這么計算,那這背后的原理和上一小節的乘法是類似的,我們可以從R進制數的一個數值的定義,從這個定義來出發我們可以把原本的零點二幺幺足以零九八五七是所謂的除法用被除數除以除數得到一個商業我們可以把原本的零點二幺幺足以零九八五七是所謂的除法用被除數除以除數得到一個商a211÷0.985寫成這樣的一個形式,所謂的除法用被除數除以除數,得到一個商a,然后最終剩余的余數是B,這背后的含義是說被除數X可以=a,也就是商乘以除數Y,然后再加上余數B,所以我們上邊這個除法運算的結果,我們可以把它解釋為0.211,也就是這個被除數等于除數0.985×這個商0.211,然后再加上最后的余數0.000210,大家可以驗證一下,這個等式是成立的好,我們把最終得到的這個商按照位權展開,寫成R進制的定義,這樣的一個形式,那2×10的負一次方就是0.21×10的-2次方=0.01四乘以十三次方舊式零點零零四they零點二一四這個數零點二減零一零零四盒進行一個鄉陳家,負和商進行一個相乘,那么0.985和上邊我們展開的每一項進行一個組合,第1項的組合就相當于0.985×0.2這個乘法得到的結果是0.1970,而我們之前這一步得到的余數也就是剩余的,我們還需要拼湊的啊,這個數再減掉這一步,啊,拼湊上的0.1970=0.01400也就這個新的余數是我們接下來還剩余的,還需要繼續拼湊的呃一個部分,所以接下來我們在拼湊上去的部分就是0.985×0.01也就和這一位的商進行一個相乘,得到的結果是0.00985,那這次拼湊和之前剩余的部分進行一個相減,又可以得到一個新的余數,于是下一位的商0.004×0.985,就是想要盡可能的拼湊出此時還剩余的這個部分,所以所謂的余數是目前還剩余的,我們還需要拼湊的部分,剩余的我們還需要拼湊的部分,我們可以這么來理解余數,而每一次我們上一個商其實就是想要盡可能的接近當前剩余的余數,但是又不超過這個余數,所以這就是小學學習的除法豎式,為什么要這樣錯位相減的一個原因,大家可以暫停再來琢磨一下,好,那接下來我們嘗試著把10進制除法的這種運算思想,把它遷移到二進制這邊,我們來看一個比較簡單的例子,現在有X和Y這樣的兩個二進制數,并且這兩個二進制數都是正數,那我們可以把除數和被除數分別乘以2的4次方,也就相當于呃分別把這個小數點都往后移,4位,也就變成了兩個整數的相除,而現在我們模仿實際是除法的上商的一個規則,剛開始被除數有5倍,除數有5倍,那么由于被除數要小于除數,而我們上的傷只能是0或者1,并且這次上的這一位商和除數相城的一個成績不能大于此時剩余的我們做的這個,上的這一位商和除數相乘的一個乘積,不能大于此時剩余的我們需要拼湊的這個部分,所以由于剛開始這個被除數是要小于除數的,因此我們只能上0,那0乘以除數等于5個0,我們可以得到一個4倍的余數啊,因為高位是0,所以我們可以把忽略得到這個4倍的余數之后再末位補一個0,好接下來10110這個余數要大于除數,所以下一位的傷我們可以上11乘,以除數得到的結果就是這個除數本身,那么之前的榆樹減掉除術可以得到一個4位的榆樹,接下來我們再在4位余數后面再添一個0,那接下來是類似的,此時剩余的余數要比我們的重數更大,所以這一次我們同樣可以上商議,于是用這個余數減掉除術,可以得到啊,一個4位的榆樹等等在末尾添0號,現在我們剩余的這個余數零一零一零要比除數更小而我們接下來上的這一微商和除數修正,接下來只能上升0,因此這兒得到的是5個零好一相減得到4個余數,再添一個0,最后我們上升一個1最終相減得到一個4倍的余數,好,那這是我們模仿實際這小數的除法啊,得到的一個結果,那和之前類似,如果我們把每一位商的位權給考慮進去,那這邊我們得到的二進制豎式其實也可以寫成這個樣子,比如第2位的商相當于二進制的0.01×這個除數0.1101那2進制的0.01應該是=1×2的-2次方,所以除數乘以這位的商應該是除數的基礎上,小數點再往前移兩類,也就是0.001101,所以這一類的商和,再往前移兩位,也就是0.001101,所以這位的商和除數相乘之后,我們得到的一個乘積結果就是0.001 101好,那其他未來商也是類似的一個原理,大家可以自己暫停來琢磨一下,最終我們得到這樣的一個余數,所以X÷Y,我們得到的結果是0.1101余數是啊,這樣的一個值大家可以自己驗證一下,用這個商乘以除數,然后再加上余數是否可以拼湊出被除數,好那我們來簡單總結一下,手算二進制除法的一個規律,那首先由于這個定點數它的呃小數點都是固定的,所以當我們在進行兩個正的定點小數的啊,一個除法運算的時候,其實可以忽略小數點,就像左邊這個樣子,那我們每一次會確定一位商,并且在二進制除法當中,每一位商只有可能為0或者為1那美味的傷到底娶林還是去一這個是通過心算的方式得到的我們會觀察當前剩余的,并且在二進制除法當中,每一位商只有可能為0或者為1,那每一位的商到底取0還是取一還是取1,這個我們是通過心算的方式得到的,我們會觀察當前剩余的還需要拼湊的這個部分和除數的大小到底誰更大,如果除數要更大,那么這一次我們就傷0,而如果此時剩余的這個余數要比除數更大,那這一次我們就會商議是用這樣的方式來確定商,那當我們在確定了一位商之后就可以得到一個新的余數,并且基于我們上商的這個原則,我們新得到的這個余數最高位一定是0,所以我們可以把最高位的這個點給忽略掉,只關注這個余數后面的4類,然后接下來我們再在這個余數的末尾再添一個0,于是就可以再開始確定下一位的商是5倍,所以當我們確定了第5位的商之后,啊,最后得到一個余數,我們就不需要再往后繼續了,好,接下來我們要思考嘗試著用機器來實作同樣,后啊,最后得到一個余數,我們就不需要再往后繼續了,好,接下來我們要思考的問題是,如何把這種手算的思想嘗試著用機器來實作,那同樣的還是穿越回這張PPT,當我們在講到運算器基本組成的時候,我們提到過如果此時進行的是除法運算,那么ACC這個暫存器會用于存盤被除數,還有余數MQ會用于存盤商,而X通用暫存器會用于存盤除數好,接下來我們來看一下運算器如何實作原始碼的除法,接下來介紹這種方法叫恢復余數法,那之前我們探討的手算除法是呃,計算兩個正數的除法,那對于元碼的除法來說,被除數和除數既有可能是正的,有可能是負的,那類似于元碼的乘法啊,最終乘積的正負性我們會單獨的用一個異或運算來確定,只需要把被除數和除數的符號位進行一個抑或就可以確定,最終的商應該是正是-我們會用而被除數和除數的,最終的商應該是正式付而商的實際數值,我們會用呃被除數和除數的這個絕對值進行除法計算,這樣的話我們就可以轉換成之前探討的兩個正數相除的這種形式好,現在我們先忽略符號類的處理,X除以Y,那我們先寫出X和Y的絕對值的一個原碼表示,然后需要寫出除數的絕對值的補滿,然后除數的絕對值再取負的一個不忘寫出它相反數的不慢,呃,有什么用,這個大家一會會知道啊,那剛才我們說ACC里面會存盤被除數,也就是X的值01011,然后通用暫存器里面會存盤除數的一個值,也就是wai01101,然后MP暫存器里面會存盤最終的傷,剛開始我們需要把它全部置為0那之后的這一位數的深灰色這一位騎士就是當前要確定的一位上這一位的作用大家一會到這個處罰,唉,其實就是當前要確定的一位商這一位的作用大家一會會體會到啊,現在先不管好,現在我們回頭來看一下之前手動球這個除法的一個程序,之前在我們手算的時候,我們每一位的商到底取0還是取1,這個我們是通過當前剩余的這個部分,這個余數和除數的這種大小關系來確定的,我們用心算的方式來確定到底應該相鄰還是商一,那對于運算器來說,其實就是要判斷此時ACC里邊保存的這個數和通用暫存器里面保存的這個除數到底誰更大,如果ACC里邊保存的更大,那么就應該相應如果ACC里面保存的這個數更小,那么就應該相鄰好,這是一個比較理想的處理方式,但事實上我們的計算機比較少,它并不會比較這兩個數,誰更大誰更小,沒有這樣的功能那記算機確定的方式是將的他會先默笙簫默這一次上山上的是一位著我們需要把acc當中,角這兩個數誰更大誰更小,沒有這樣的功能,那計算機確定它該上上一還是上30的啊,方式是這樣的,它會先默認先默認這一次要上商一,那如果這一次上商上的施迤,是不是就意味著我們需要把ACC當中此時存盤的這個術和通用暫存器當中存盤的這個除數進行一個相減的操作,然后再把這個相減的結果放到ACC里邊,因為每一次我們上商一其實就是把余數減掉除數對吧?那要實作余數減掉除數,是不是就相當于要讓余數加上這個除數的呃,一個負值的補碼,因為計算機里面并沒有減法電路,所有的減法都是用補碼的加法來等價的實作的,所以這就是為什么?我們之前要寫出這個除數的賦值的一個補碼的原因,好來看一下,此時我們要確定的是第1位商低位商,我們用手算的方式知道,本來是應該上林的,但是計算機不一樣,他會默認此時應該上一啊,那基于之前的特征,如果這一次商要上一那么就需要有,知道,但是計算機不一樣,它會默認此時應該上一啊,那基于之前的推論,如果這一次商要上一,那么就需要用ACC里面保留的這個倍數數,或者說也可以把它看作是當前的余數減掉呃除數的值,也就是要加上這個除數的負值的一個不罵,然后把這個減法操作的結果再放回ACC累加暫存器當中,那么這次余數減除數得到的結果是4個1一個0這個加法是通過AR又完成的,ACC里面的直送到a ru,然后通用暫存器里的值也送到AR you a are you里面的加法器啊,做完加法之后會把這些加的結果再次送回ACC,把ACC里面的內容給覆寫,所以經過這一步的操作,ACC里的值會更新為4個一一個0好,現在問題來了之前我們求余數的這一步減法操作得到的結果那是不是說明之前的這個語速是要比除數更小的所以之前上上一級是不應該的,于是怎么辦呢?是要比除數更小的,所以之前上商上一其實是不應該的,于是當運算器檢測到符號位為1的時候,他就知道之前上商一上錯了,于是怎么辦呢?知錯就改,應該把商從一改為0,好那既然現在應該相鄰而不是商1,所以我們之前用余數減掉除數所得到的這個值是不是錯誤的,本來不應該減掉除數,而應該是減掉全0,也就是什么都不減,所以我們必須把ACC里邊的這個數值把它恢復原樣恢復成原有的那個余數好,那之前我們是減了一個除數,我們要把它恢復原樣,我們是不是再加上除數把它加回去就行了,所以基于之前相減的這個結果,在這個結果的基礎上,運算器會再加上除數,然后把這兩個數相加的結果再次的送回ACC把ACC的內容給覆寫,這樣的話ACC里邊就可以恢復成原本該有的那個余數也就是商林就是為什么,你就可以恢復成原本該有的那個余數,也就是商琳得到的這個余數好,所以這就是為什么這種方法叫恢復余數法的原因,計算機剛開始會默認傷醫而傷醫的時候,得到的余數有可能是錯誤的,如果發現上錯了改成商林的話,需要把榆樹恢復原樣,然后才可以進行接下來的運算好,現在我們恢復了榆樹之后,相當于已經完成了傷鈴并且相減的一個作業,那這次相減得到的結果應該是01011這樣的5倍的音速好,接下來當我們在確定下一位的商的時候,這一位的商乘以除數所得到的這個結果,是不是要和之前這個余數進行一個錯位的相減,我們需要把手部的這個0給去掉,然后再抹未補上一個0,那用硬體怎么實作呢?很簡單,只需要把AC和M里的內容全部統一的邏輯左移一位就行了,也就是把M的最高位左移移到ACC的沒味,然后AC里面每一位都往前移原本的最高倍的,只需要把ACC和MQ里的內容全部統一的邏輯左移移位就行,乘以除數所得到的這個結果,是不是要和之前這個余數進行一個錯位的相減,我們需要把手部的這個零給去掉,然后再抹未補上一個0,那用硬體怎么?乘以除數所得到的這個結果,是不是要和之前這個余數進行一個錯位的相減,我們需要把手部的這個0給去掉,然后在末位補上一個0,那用硬體怎么實作呢?很簡單,只需要把ACC和MQ里的內容全部統一的邏輯左移一位就行了,也就是把MQ的最高位左移移到ACC的末位,然后每一味都往前移,原本的這個最高倍的靈會被丟棄,那由于是邏輯左移,所以MP里面空出的這個低位我們會用靈來補上好,現在我們已經模擬出了手,算得到第2個余數的這樣的一個步驟,接下來我們是不是就可以確定下一位的傷應該傷多少,那和之前一樣計算機很少他會默認先傷醫,那傷醫就意味著此時的這個余數,這個余數應該要減掉除數邏輯和楚楚就相當于加上這個處的副職的一個不慢那么這一次相見操作這個結果ac里邊,互嗎?那么這一次相見操作得到的結果是這樣的,我們把這個相減的結果更新到ACC里邊,接下來運算器檢查,此時ACC里面得到的這個余數它的值是正的,那這就意味著之前這個余數確實是要比除數更大的,所以此時這一步我們商一并沒有什么錯,那這種情況下,這我們得到的余數就是一個正確的余數,我們不需要再把它恢復原樣,那接下來的處理和之前類似手算的時候,我們會在啊這個余數的末位補一個0,那用硬體實作的話,就是讓ACC和MQ里的這些數倍全部的統一邏輯左移一位 ACC的高位這個零會被丟棄,然后末位會補上一個0,好,現在這個余數我們已經搞定了,接下來我們就可以確定下一步的商應該是多少,那同樣的會首先默認商一 Ac的值剪掉除數的職業就是加上除數了一個結果是這樣的還把這個結果更新過檢查站這次得了余數同樣是一個正數,等余數同樣是一個質數,那就說明之前商一是沒有錯的,因此進入下一步,讓ACC和MQ全部邏輯左移,然后MQ的低位補0,好,那現在我們已經確定了余數的值是多少,接下來就可以確定下一位的商應該商多少,同樣的計算機很少,它會默認先商,一讓ACC里的值直接減掉,除數也就是加上除數絕對值的負值的一個補碼,那么得到的結果是11101,好,那這一次我們得到的這個余數是一個負值,那是不是說明之前這一步的余數要比除數更小,所以才導致了減法之后得到一個負值,好那余數比除數更小,所以之前這一步我們不應該傷醫而應該傷伶,所以接下來運算器會把當前這一輩的傷從一改為0,并且還需要恢復余數那會瘦的辦法就是當前the的這個值再加上除數零一零一零降了一個狀態接下來應該進入下一步,再加上除數因此余數會被恢復到01010,這樣的一個狀態好,接下來應該進入下一步,讓這個余數還有商統一的左移邏輯左移位低位補0,那么就得到了下一步我們需要處理的這個余數,此時我們需要確定最后一位的商是多少,當它的計算機會默認商一讓ACC的值減掉除數的值,也就是加上這個除數的負值的一個補碼,得到的結果是00111對應手,算就是我們最后這一步得到的這個余數的結果好,那由于我們這兒是假定及其字長只有5倍,因此我們只能求5倍的商好,那到這一步我們就求出了最終的一個商,那需要提醒大家的是最后這一步,我們上商議得到了一個正的余數,所以到這一步我們除法就結束了,但是如果說我們最后這一步上商一最后發現余數為一個負數需要恢復這個語速也需要在當前的基礎上ac的值加上除數并且當前這個,還是需要恢復這個余數,也就是還需要在當前這一步的基礎上,讓ACC的值加上除數,并且當前這一位的商,我們需要把它從一改成0,這樣才能結束,最后這一步的余數是正是負這會直接影響到我們的除法,應該在哪一步停止好,那由于我們這假定的是一個定點小數的一個除法運算,所以小數點隱含在這個符號位的后面,商的值是0.101和我們手算的結果一致,而最終得到的這個余數需要在0.0111的基礎上再乘以2的負N次方,那N的值是4,所以真實的余數需要在這個基礎上再乘以2的-4次方,而最后我們是不是還需要關注符號位應該是多少?那這個例子當中,由于X和Y都是正的0和0異或等于0,所以這個符號V為0,所以這個商保持正值不變可以暫停我們算廚房的一個程序需要注意的是計算機如果說,意的是計算機會默認上商一,而如果說發現余數得到了一個負值,我們就需要把商從1恢復成0,同時把余數恢復原樣,好,那這給大家畫出硬體細節是為了讓大家理解的更深,那如果用手算的方式模擬恢復余數法啊,用這樣的方式寫出來就可以了,來看一下題目會說明機器字長是多少倍,然后給出被除數和除數的一個值,那我們需要給出被除數和除數的絕對值的一個原始碼表示,并且寫出除數的絕對值和絕對值取負的一個無碼的形式,好剛開始我們會嘗試著用最初始的這個被除數減掉除數,也就是加上除數的絕對值的負值的一個補碼,而用這樣的方式得到一個余數,此時這個余數是一個負值符號位為1,所以我們可以確定當前這一位的商,我們應該商0并且在這個付的余數的基礎上再加上除數來恢復原本該有的樣子然后把這個語速邏輯做研究一位一定,這個余數邏輯左移邏輯左移就意味著第1位一定是補0,好,所以恢復了余數,并且邏輯左移之后,我們就可以開始確定下一位的商應該商多少,那同樣的我們會先減掉這個除數,用這次減法操作得到的余數的正負性來確定當前這一位的商,我們應該取0還是取0,還是取1,如果余數為正,那就確定這一位商應該取1,如果余數為負,那么就確定這一位的商應該取0,好,那由于我們此時得到的余數為正,所以就不需要再回復余數,可以直接把當前這個余數給邏輯左移末位天0,這樣我們又可以進入下一位的商的確定,當然了要減掉這個除數,然后根據這個余數的正負性來確定商到底取一還是取0,好那后續的就不再展開,大家可以暫停,然后自己在稿紙上手算模擬一遍啊,來進行一個小小的總結,對于原始碼的恢復余數法我們首先要用得到一個新的余數最開始的時候我們可以把這個被除數看作是榆樹一不一定,得到一個新的余數,那在最開始的時候我們可以把這個被除數看作是余數,第1步一定是減掉這個除數,然后我們會根據這個新余數的正負性來判斷,我們這一位的商應該商0還是商一,如果這個新余數為正數符號位為0,那么我們就可以確定這步我們應該商議,并且直接把之前得到的這個余數邏輯左移,接下來就可以進入下一輪的處理,而如果說之前得到的這個所謂的新余數它是一個負值符號,V為1,那么我們可以確定當前這一倍的商應該相鄰,并且通過加上除數的絕對值的方法來恢復余數,那我們把這老余數給邏輯左移移位,就可以再進入下一輪的處理,那需要注意的是,如果數值為韋恩的話,那么邏輯,所以只需要進行N次,但世上傷我們需要上N加一次,最后這次得到的余數,我們是不需要進行邏輯左移的,所以左移的次數會比上傷的次數少一次原始碼的處罰回復的問題是這樣的每一次我們,說之前得到的這個所謂的新榆樹,他是一個賦值符號位為1,那么我們可以確定當前這一位的傷應該傷伶,并且通過加上除數的絕對值的方法來恢復余數,那我們把這個老榆樹給邏輯左移一位,就可以在進入下一輪的處理,那需要注意的是如果數值被韋恩的話,那么邏輯,所以只需要進行N次,但世上傷我們需要上N加一次,最后這一次得到的余數,我們是不需要進行邏輯左移的,所以左移的次數會比上傷的次數少一次啊,那這就是原始碼的除法和恢復余數法,那現在的問題是這樣的,每一次我們都先默認商一,當我們發現余數為負的時候再進行加除數恢復余數,這樣的一個操作,那這種操作顯然是比較麻煩的,所以接下來我們要思考的問題是能否不恢復余數,把這個中間的一些步驟給進行簡化呢,好那我們來分析一下,恢復余數的這個程序來看這個例子啊,剛開始這一步剪掉除數,得到了一個副的榆樹,那我們把這個余數記為AA是一個負值由于,我不恢復余數,把這個中間的一些步驟給進行簡化了,好那我們來分析一下,恢復余數的這個程序來看這個例子啊,剛開始這一步剪掉除數,得到了一個副的余數,那我們把這個余數記為AA是一個負值好,接下來由于a是負的,所以我們需要讓a加上我們的惡徒數的絕對值,那我們把除數的值記為B,所以再往下0.1011這一步,其實是a+B的一個結果,好接下來我們會把a+B邏輯左移一位,那這個邏輯左移是不是相當于×2對吧?那我們把它展開就是2a+2B這樣的一個結果,好,現在基于2a+2B這樣的一個結果,我們會再減掉除數也就是減掉B來得到下一步的余數,那2a+2B再減掉一個B,不就是2a加B嗎?好,所以之前這一步我們得到了一個負的余數,然后把這個負的余數一步一步恢復左移,然后再減掉除數,得到了確定下一位商所需要的這個余數這中間的程序我們中間做,恢復左移,然后再減掉除數,得到了確定下一位商所需要的這個余數,這中間的程序,我們中間做的這一系列操作,其實可以把它合并為2a加B,也就是余數乘以2,再加上除數這樣的一個綜合的效果,那之前這個余數乘以2不就相當于把榆樹所以一味嗎?在左移移位之后,再加上除數的絕對值就可以直接得到下一步的余數,這樣的話我們恢復余數的這個步驟就可以直接被跳過,可以讓流程簡化,效率更高好,所以這就是我們優化恢復余數法的一個策略,如果我們發現余數得到了一個負值,那么我們可以直接確定這一位的商應該是商林,然后接下來我們不需要播出余數,而是讓余數左移一位,然后再加上除數的值就可以直接跳到下一步好,那基于這種優化思路的原始碼除法,我們可以把它稱為加減交替法,又可以稱為不恢復余數法剛開始被除數是占了一個只放在acd開始全部為零,只存放在ACC里面,MQ剛開始全部為0,那第1步我們一定是減掉這個除數啊,減掉除數之后得到的余數是一個負值,那我們可以確定此時的商應該商0,那基于之前的推論,我們不需要回復余數,我們可以直接讓這個余數邏輯左移邏輯左移左移之后再加上一個除數就可以直接得到下一步的余數,那由于下一步的這余數它是正的,所以我們可以確定這一位的商,我們應該商一好,那由于此時這個余數是正的,那接下來的處理方式和恢復余數法是一樣的,剩的余數我們直接讓它邏輯左移,然后用左移得到的這個余數減掉除數,用這樣的方式再確定下一步的榆樹,那在下一步的榆樹同樣是一個正的,所以我們可以確定這一位的商應該是1號,總之我們會根據每一步得到的余數是正還是負來確定上應該是零還是一張的值之外我們還會根據余數的政府確定下一步,應該是0還是1,那除了確定商的值之外,我們還會根據余數的正負性來確定,下一步我們應該左移加除數還是左移減除數好,那這就是原碼的加減交替法加減交替法就是,阿當余數為負的時候,中間的這些步驟把它統一為一部更簡單的操作,是對恢復余數法的一個優化,那原碼的加減交替法鄂博號位的確定也是一樣的,需要單獨的來確定,用被除數和除數的符號為進行一個抑或來確定上的正負性,另外一點需要強調的是正負性和商是相同的,如果商為負,那么這個也應該是負的質量,那最后還是要注意,如果我們最后這一步得到的余數是一個負值,我們同樣也需要把這個余數恢復,需要把這個余數恢復原樣,也就是加上除數的絕對值,用這樣的方式來得到正確的余數,而所以雖然加減交替法又稱為不恢復余數法,但是在最后這一步,如果發現余數為負的時候,最后這一步同樣也需要恢復余數,當然這只是有可能出現的情況,像剛才我們給的這個例子當中,最后這一步就不需要核出余數,好,最后同樣對加減交替法進行一個小小的總結,啊,進行一個小小的總結啊,剛開始第1步一定是用被除數減掉除數的絕對值,得到一個新的余數,然后接下來根據這個新的余,除數的絕對值得到一個新的余數,然后接下來根據這個新的余數為正還是為負來確定當前這一位的商應該商0還是商1,如果余數為負,那么就是商0并且讓余數邏輯左移,然后再加上除數用這樣的方式得到下一步的新余數,而如果余數為正,那么我們可以確定商一,然后讓當前這一步得到的余數左移并且減掉除數,用這樣的方式得到下一步的新余數,整個程序我們加法和減法的,呃,執行次數總共會有N加一次,每進行一次加減就會更新一次余數,而每更新一次余數就可以根據余數的正負性來確定一位商到底是0還是0還是1,那需要注意的是當我們在確定了最后一位商之后我們就不需要再進行邏輯作揖了所以操作的次數要比加減運算的字數要少一個另外一點如果最后這一步得到榆樹市一個副職三零并且在多進行the加上,后這一步得到余數是一個負值,那么我們需要商零并且再多進行一次,加上除數的一個加法運算,用這樣的方式來得到正確的余數,所以理論上來說,加減交替法當中,加法和減法的總次數有可能是N加一次,也有可能是N加二次,但邏輯左移只需要進行分次,好,那這是原碼的加減交替法,大家可以再暫停吸收一下,好那最后還需要跟大家聊一個問題,在這個地方我們探討的是定點小數的一個除法運算,那由于是定點小數,所以我們最終得到的商肯定也只能是一個定點小數,而不能是一個整數,因此在定點數的除法運算當中,我們會規定被除數一定要小于除數,因為如果被除數大于除數的話,那最終傷的結果肯定就要大于1,而定點小數無法表示大于1這樣的一個范圍,那硬體就是怎么檢查被除數和除數的大小關系的呢?其實就是通過第1步的商來確定的,正常情況下,我們第1步減除數所得到的這個余數一定要是一個賦值,通過第1步的傷來確定的,正常情況下,我們第1步減除術所得到的這個余數一定要是一個負值,如果第1步得到的就是一個正值,也就是要傷醫的話,那么就說明我們的被除數要比除數更大,那此時硬體電路就會檢測出這個問題,并且直接停止這些除法的運算,這種除法是沒辦法用定點小數來表示的好的,那么大家可以再消化一下,這恢復余數法和不恢復余數法它們的一個啊區別和聯系,那以上就這一小節的全部內容,好的尚小姐,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205332.html
標籤:AI
