那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言中如何使用查表提速

麥辣雞腿堡 ? 來源:軒哥談芯 ? 作者:Debug ? 2023-11-21 11:19 ? 次閱讀

使用查表提速

一個資深的C語言程序員,基本上不會在自己的主循環里搞什么復雜的運算工作,絕對都是先計算好了,再到循環里查表。看下面的例子:

舊代碼:

long factorial(int i)
{
    if (i == 0)
      return 1;
    else
      return i * factorial(i - 1);
}

查表法新代碼:

static long factorial_table[] = {112624120720  /* etc */ };
long factorial(int i)
{
    return factorial_table[i];
}

如果需要建立的表很大,那么可以通過一個初始化函數,在循環外臨時生成表格。

看一個求余運算

a=a%8;

如果改為:

a=a&7;

就會執行速度變快,因為在處理器中,位操作只需一個指令周期即可完成,而大部分的C編譯器的“%”運算均是調用子程序來完成,代碼長、執行速度慢。通常,只要求是求2n方的余數,均可使用位操作的方法來代替。

求平方運算

一些偏軟件的工程師往往會寫成這樣:

a=pow(a, 2.0);

也許這樣兼容性更好,可以處理的數據類型更多,但對于嵌入式來說,效率更為重要。

軒哥曾經排查過一個代碼就是如此,這里的pow()函數執行速度慢不說,調用這個函數將會產生2K多的代碼,直接導致Flash所剩無幾。

對于定點運算,可以改為:

a=a*a;

在有內置硬件乘法器的單片機中(如STM32),乘法運算比求平方運算快得多,因為浮點數的求平方是通過調用子程序來實現的,而自帶硬件乘法器的單片機中,乘法運算只需2個時鐘周期就可以完成。即使是在沒有內置硬件乘法器的單片機中,乘法運算的子程序也要比平方運算的子程序代碼短,執行速度快。

如果是求3次方,如:

a=pow(a,3.0);

更改為:

a=a*a*a;

效率的提升會非常明顯。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137726
  • 程序
    +關注

    關注

    117

    文章

    3796

    瀏覽量

    81418
  • 代碼
    +關注

    關注

    30

    文章

    4828

    瀏覽量

    69055
收藏 人收藏

    評論

    相關推薦

    C語言中宏定義的應用

    C語言中,宏定義是一種預處理指令,用于在代碼中定義和使用常量、函數或代碼片段的替代。
    發表于 08-17 15:33 ?905次閱讀

    C語言中for循環的用法和應用 C語言中for循環與while循環的區別

    C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
    發表于 08-18 16:33 ?3372次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環的用法和應用 <b class='flag-5'>C</b><b class='flag-5'>語言中</b>for循環與while循環的區別

    C語言中基本數據類型、變量和常量的使用

    C語言中基本數據類型、變量和常量的使用
    發表于 08-18 16:42 ?2919次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>基本數據類型、變量和常量的使用

    C語言中結構體能不能相加

    C語言中,結構體能不能相加?
    的頭像 發表于 12-19 17:04 ?1352次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>結構體能不能相加

    C語言中指針的介紹非常詳細

    C語言中指針的介紹非常詳細 C語言中指針的介紹非常詳細
    發表于 12-25 10:39 ?57次下載

    C語言和匯編語言混合編程方法和C語言中斷處理方法

    C語言和匯編語言混合編程方法和C語言中斷處理方法,new
    發表于 01-06 14:36 ?36次下載

    C語言中的關鍵字

    C語言中的入門教程
    發表于 10-14 16:24 ?3次下載

    c語言中typedef的用法

    C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環
    發表于 11-09 15:23 ?9268次閱讀

    C語言中隨機數的生成代碼

    C語言中隨機數的生成完整代碼:
    的頭像 發表于 02-20 09:21 ?1w次閱讀

    總結那么幾個C語言中的“坑”

    總結幾個C語言中的“坑”
    的頭像 發表于 01-16 10:52 ?2643次閱讀

    C語言應用】使用查表法計算CRC8

    C語言應用】使用查表法計算CRC8
    的頭像 發表于 08-31 12:54 ?1w次閱讀

    c#語言中怎么使用HTTP代理

    c#語言中怎么使用HTTP代理。
    的頭像 發表于 09-01 14:46 ?2200次閱讀

    scanf在C語言中的作用

    scanf在C語言中的作用? scanf是C語言中的輸入函數,用于從標準輸入設備(如鍵盤)讀取數據,并將其存儲到變量中。它是C
    的頭像 發表于 11-23 14:13 ?1568次閱讀

    c語言中數組怎么定義

    C語言中,數組是一種用來存儲相同類型元素的數據結構。它可以存儲多個元素,并通過一個共同的名稱來引用這些元素。數組是一種很重要的數據結構,可以用于解決很多實際的問題。 在C語言中,定義數
    的頭像 發表于 11-24 10:11 ?3278次閱讀

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?473次閱讀
    重庆百家乐的玩法技巧和规则 | bet365是否合法| 句容市| 永利百家乐官网娱乐场| 百家乐澳门路规则| 百家乐麻将筹码币| 盐津县| 沙龙百家乐官网娱乐场开户注册 | 电脑打百家乐怎么赢| 皇冠现金网哪个最好| 百家乐官网电话投注多少| 百家乐包赢技巧| 大发888游戏 下载| 百家乐官网巴厘岛娱乐城| 百家乐轮盘怎么玩| 大发888赌博网站| 百家乐官网娱乐城网站| 百家乐是否有路子| 聚龍社百家乐官网的玩法技巧和规则 | 澳门百家乐官网赌钱| 百家乐路单破| 黑水县| 百家乐不倒翁缺点| 云鼎娱乐城怎么存钱| 百家乐官网庄闲和各是多少| 百家乐投注方向| 博彩公司评级| 大西洋百家乐官网的玩法技巧和规则| 喜洋洋水果机遥控器| 百家乐官网书籍| 百盛百家乐软件| 崇信县| 百家乐百家乐游戏| 浩博国际| 德州百家乐官网扑克桌| 元游棋牌游戏大厅下载| 龍城百家乐官网的玩法技巧和规则| 北京太阳城医院| 百家乐官网平台出租家乐平台出租| 百家乐透视牌靴| 网上百家乐官网投注法|