在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    7608

    瀏覽量

    137125
  • 程序
    +關注

    關注

    117

    文章

    3792

    瀏覽量

    81163
  • 代碼
    +關注

    關注

    30

    文章

    4802

    瀏覽量

    68743
收藏 人收藏

    評論

    相關推薦

    C語言中宏定義的應用

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

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

    C語言中的循環結構時,for循環是最常用的一種。它允許重復執行一段代碼,直到滿足特定條件為止。
    發表于 08-18 16:33 ?3323次閱讀
    <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 ?2853次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言中</b>基本數據類型、變量和常量的使用

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

    C語言中,結構體能不能相加?
    的頭像 發表于 12-19 17:04 ?1312次閱讀
    <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 ?9246次閱讀

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

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

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

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

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

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

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

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

    scanf在C語言中的作用

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

    c語言中數組怎么定義

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

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?378次閱讀
    主站蜘蛛池模板: 永久看免费bbbbb视频 | 色多多拼多多网站 | 亚洲视频一区在线 | dvd碟片色爱| 四虎影院在线观看网站 | 卡2卡三卡四卡精品公司 | 97人人艹 | 女性一级全黄生活片在线播放 | 四虎国产精品永久在线看 | 亚洲精品在线免费观看视频 | 免费一级欧美在线观看视频片 | 荡女妇边被c边呻吟久久 | 丁香五月欧美成人 | 很黄很暴力 很污秽的小说 很黄很黄叫声床戏免费视频 | 五月天狠狠 | 一区二区三区在线看 | 日本加勒比黑人 | 国产亚洲精品美女2020久久 | 最新人妖shemaletube人妖 最新日本免费一区二区三区中文 | 日本黄色网址视频 | 天天射天天操天天干 | 天天色资料 | 亚洲午夜久久久久久91 | 情趣店上班h系列小说 | 国产精品四虎 | 午夜视频h| 欧美影院一区二区三区 | 国产拍拍视频 | 夜色爽爽 | 婷婷成人丁香五月综合激情 | 免费人成在线观看网站 | 天天躁夜夜 | 色婷婷一区二区三区四区成人 | 亚洲人的天堂男人爽爽爽 | 男女视频在线看 | 欧美人成绝费网站色www吃脚 | 狠狠狠狠狠狠狠狠 | 欧美在线bdsm调教一区 | 美女国产一区 | 欧美就是色 | 精品国产综合区久久久久99 |