浮點數如何轉換為定點數?

時間 2021-05-13 08:33:02

1樓:Aman

按 IEEE754 標準,float 的格式是 binary32,double 的格式是 binary64,浮點數中的有效數字(significant)部分其實可以理解為是乙個定點數,只不過有指數(exponent)部分做了小數點偏移(類似科學計數法,只不過是二進位制的,浮點數因此得名)。

我沒有具體寫過浮點到定點的轉換,不過我認為這不會太複雜,思路:浮點數在定點數表達範圍內時,只需要用位運算把有效數字部分取出來,再根據指數部分做位移就好。當然,隱藏位,符號位,指數偏移等細節需要注意。

好在浮點定點都是二進位制所以不需要轉換。

Double-precision floating-point format

2樓:MjAxOS43LjI2

我想你問的應該是定點小數和定點整數與浮點數的轉換

定點和浮點表示法的表示範圍差距太大,所以我想在大多數情況下或許很難直接轉換,除非這個數剛好都在兩種表示法的表示範圍內。浮點表示類似於科學計數法,形式為N = J^ E × M,比如0.1101×2^-2。

在電腦科學領域,定點整數的小數點被固定在最低位之後,所以是純整數,第一位是符號位,像0111就是7,1111就是-7。定點小數小數點被固定在最高位之後所以是純小數,最高位也是符號位。比如說1111就是-0.

875而0111就是0.875。所以表示範圍很有限。

如果如果你非要的話首先要保證這個數在表示範圍之內然後直接二進位制公式轉換,像浮點數0.111轉換成定點數就是0111,第一位都是符號位。

C 定點數版本的Box2d比C 的浮點數原版慢20 40倍?

有個思路,計算過程用浮點數,最高精度,每次中間結果都擷取一下,抹掉可能的微小誤差,失去一點準確度來保證不同機器的一致性,不知道可行不。 先搞個浮點數版本看看效能如何唄,是不是單純的因為數字型別,做成兩個版本互相可以切換慢慢玩 c 的box2d有乙個叫velcrophysics,可以看下 崔漢青 我猜...

為什麼叫浮點數

道不輕傳 定點數能表示的數字有限,因為小數點固定,整數字和小數字就固定,就不利於表達特別大或特別小的數,浮點數就可以表示很大或很小的數字,因為小數點不固定,比如 123.45 用十進位制科學計數法可以表達為 1.2345 10 其中 1.2345 為尾數,10 為基數,2 為指數。浮點數利用指數達到...

浮點數是如何計算hash的?

hash的本質是對二進位制串進行操作,只要有一位不同hash結果就差千萬里。那麼,你的問題就是先把相近的值用相同的二進位制串表達,然後去計算hash。具體怎麼定義相近,就由你自己實現。最簡單的辦法就是用吧。這裡的公式編輯器不支援分數麼? 如何保證被看做相等的兩個數值非常接近的浮點數hash到相同的值...