新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 高效的C編程之: 浮點運算

        高效的C編程之: 浮點運算

        作者: 時間:2013-09-30 來源:網絡 收藏

        14.10

        大多數的處理器硬件上并不支持。但上提供了以下幾個選項來實現

        本文引用地址:http://www.104case.com/article/257015.htm

        ·(Floating-PointAccelerator):上提供了一組協處理器指令專門實現浮點運算。但這需要硬件支持,具體某一處理器上是否有協處理器支持,可以查看ARM相關手冊。

        ·浮點運算仿真(FPE):使用軟件仿真了協處理器的執行。

        ·浮點運算庫(FPLib):使用ARM的浮點運算庫函數實現程序中的浮點運算操作。這就意味著C編譯器要把每一個浮點操作轉換成一個子程序調用。C庫中的子函數使用整型運算來模擬浮點操作。這些代碼是用高效的匯編語言編寫而成的。盡管如此,浮點運算執行起來還是要比相應整型運算慢得多。

        注意

        Thumb指令不支持協處理器指令,所以在Thumb狀態下實現浮點運算,只能調用ARM浮點運算庫。

        為了在ARM上高效地實現浮點運算,請遵循以下規則。

        ·避免使用浮點除法運算。通常情況下,除法運算的執行速度是普通加法或乘法運算速度的1/2。在無法避免除法的情況下,盡量使除法的除數為常數。如,x=x/3.0,可將其變為x=x*(1.0/3.0)。這樣除數為常數(1.0/3.0),該值在編譯階段由編譯器計算。

        ·使用float型代替double型。float型要比double使用更少的內存和寄存器。

        ·避免使用三角函數功能。實現三角函數功能,如sin、cos,使用了大量的乘加運算,它的運算速度大約是普通乘法運算的十倍。

        ·當編譯器處理浮點運算操作時,由于精度的影響很多優化不能實現。比如,表達式3*(x/3),編譯器不能判斷其值和x是等價的。所以在使用浮點運算表達式時,最好先人工的做一些必要的優化。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 会昌县| 炉霍县| 广南县| 江安县| 衡东县| 安吉县| 衡阳市| 循化| 呼伦贝尔市| 沙湾县| 临澧县| 剑川县| 宁武县| 汤阴县| 仁化县| 崇左市| 黄石市| 浦县| 瑞金市| 孝义市| 包头市| 周至县| 子长县| 平原县| 灯塔市| 昌吉市| 天峻县| 云阳县| 巴林左旗| 沧源| 舒城县| 刚察县| 荆门市| 收藏| 南乐县| 上思县| 阿勒泰市| 长兴县| 南安市| 拉萨市| 武定县|