在處理圖形運算,特別是3d圖形生成運算時,往往要定義乙個fixed資料型別,我稱它為定點數,定點數其時就是乙個整形資料型別,他的作用就是把所有數 進行轉換,從而得到相應型別的整型表達,然後使用定點數進行整行運算,取到最終值並將其轉換回實際的基本資料型別。因此它是通過避免大量的浮點運算來加快 圖形處理的乙個方式。
fixed是業界使用最廣的一種型別,他並沒有在標準c或者其他語言中定義,程式設計師可以靈活的使用fixed型別,可以定義自己想要的fixed型別。那 麼什麼是fixed型別呢?fixed型別是用來取代浮點,使用4位元組的高2個位元組表示整數字,低2個位元組表示浮點位。每個位元組有8個bit位,4個位元組 32個bit位,因此,我們把這種fixed稱為16.16fixed。當然,也有使用24.8的fixed,這就要看需求和精確度了。比如fixed中 的數字1,就是65536,也就是(1<<16)。這裡用了位移公式,就是將1左移16位,也就是2個位元組,左移16等於剩以65536,只 不過位移來的非常快,快過加法。(這裡理解不了就算了)比如數字32.5,等於(32<<16)|32768,等於 32*65536+32768。為什麼要這麼麻煩呢?有了fixed,就好像操作整數一樣,都是整數運算了。fixed的四捨五入也很簡單,比如我們將x 四捨五入到整數型別,就是(x+32768)>>16。32768就是半個fixed的1,也就是浮點的0.5。右移16位就是除以 65536,為的是將高2位元組移到正常的整數字上。我都說暈了,以後慢慢解釋給大家,呵呵。
fixed型別說了一堆,究竟來做什麼的?
比如上例中,y軸每次都要偏移0.4,而這個數是個浮點,嚴重影響了運算速度。比如,我們後台有乙個數,用來計量y軸本次的座標,就叫做變數yy吧。x每 次都加1,也就是xx++,y每次加0.4,也就是yy+=0.4。為了提高速度,我們將yy公升級到fixed型別,yy每次加fixed的0.4,也就 是0.4*65536=26214,然後再四捨五入到整數型別,即yy+=26214,y=(yy+32768)>>16。這樣,就得到了每 次的整數y,並且都是整數的加減和位運算,速度非常快
F 學習筆記(一)F 中的資料型別
最近,隨著vs2010 beta2 的發布,下了最新的vs2010旗艦版,在win7上跑了下,還是蠻吃記憶體的,對於f 這個新增事物,也看了些原版的資料。f 是由微軟發展的為微軟.net語言提供執行環境的程式語言。它是基於ocaml的,而ocaml是基於ml 函式程式語言的。這是乙個用於顯示.net...
資料型別基礎資料型別
資料型別 基礎型別 除八大基礎型別其他的都是引用型資料型別 引用資料型別 基礎資料型別 整型 byte 佔乙個位元組,範圍 128 127 short 佔兩個位元組,範圍 32768 32767 int 最常用 佔四個位元組,範圍 2147483648 2147483647 long 佔八個位元組 ...
F28335 ADC資料型別轉換的問題
在用28335取樣的時候,難免會碰到因為資料型別的問題導致無法順利從結果暫存器adcresult中提取到我們想要的值,尋其原因是因為在結果暫存器中的資料型別,和我們需要精確讀出的資料型別不同,尤其是adc是存在比例關係的,在進行除法運算的時候經常會出現錯誤,所以在此分享一下我提取的方法,主要運用vo...