在线观看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次閱讀
    主站蜘蛛池模板: 黄色在线观看视频| 免费在线你懂的| 欧美在线高清视频| 特级毛片永久久免费观看| 久久免费精品国产72精品剧情| 午夜视频在线网站| 亚洲色图图片专区| 国产精品福利久久2020| 又粗又爽又色男女乱淫播放男女| 人人干人人爱| 五月综合激情网| 涩五月婷婷| 欧美性生活网址| 黄色网址你懂的| 最近免费| 成人一级视频| 五月深爱婷婷| 国产高清一级在线观看| 天天爱天天做天天爽夜夜揉| 成人a毛片视频免费看| 网站在线你懂的| 99精品在线| 婷婷六月久久综合丁香一二| 岛国毛片在线观看| 婷婷综合激情网| 免费人成在线观看网站品爱网日本| 色偷偷7777www人| 女人特黄大aaaaaa大片| 日韩一区二区在线观看| 一区精品视频| 人人干人人看| 丁香六月色婷婷| 免费a大片| 亚洲视屏一区| 四虎影院免费观看| 特黄特色三级在线播放| 亚洲综合精品| 欧美日韩看片| 最近高清在线视频观看免费| 欲色淫香| a资源在线|