在线观看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

    文章

    7630

    瀏覽量

    140581
  • 程序
    +關注

    關注

    117

    文章

    3825

    瀏覽量

    82507
  • 代碼
    +關注

    關注

    30

    文章

    4891

    瀏覽量

    70317
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    C語言中宏定義的應用

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

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

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

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

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

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

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

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

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

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

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

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

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

    scanf在C語言中的作用

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

    c語言中數組怎么定義

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

    C語言中的socket編程基礎

    Socket編程簡介 Socket是一種通信機制,允許程序之間進行通信。在C語言中,socket編程是網絡編程的基礎。通過使用socket,程序可以發送和接收數據,實現不同計算機之間的通信
    的頭像 發表于 11-01 16:51 ?1095次閱讀
    主站蜘蛛池模板: 免费福利片2022潦草影视午夜 | 亚洲人成一区 | 综合五月天堂 | 成人激情站 | 国产精品视频永久免费播放 | 91国内视频| 欧美大香a蕉免费 | 网友偷自拍原创区 | 午夜艹逼| 亚洲视频天天射 | 天天拍天天干天天操 | 色天使在线视频 | 亚洲国产欧美视频 | bbbb毛片免费看| 色噜噜狠狠狠狠色综合久 | 性生大片免费观看无遮挡 | se01亚洲| 男女免费网站 | 黄视频免费在线看 | 性色视频在线观看 | 免费高清一级欧美片在线观看 | 91p0rn永久备用地址二 | 在线国产资源 | 天堂网欧美 | 欧美五月婷婷 | 日本三级11k影院在线 | 美女被色 | 欧美特黄三级在线观看 | 日本视频h | 女生扒开尿口让男生舔 | 国产色爽免费视频 | 久青草视频在线播放 | 26uuu另类亚洲欧美日本一 | 色秀网站 | 日日噜噜夜夜狠狠久久丁香 | 大美女久久久久久j久久 | 喷潮白浆直流在线播放 | 欧美成人免费网站 | 天天操夜夜操狠狠操 | 资源视频在线观看 | 失禁h啪肉尿出来高h受 |