最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

浮點(diǎn)數(shù)乘法和整形乘除法的效率經(jīng)驗(yàn)比較

 更新時(shí)間:2022年05月18日 16:39:43   作者:concyclics  
這篇文章主要為大家介紹了浮點(diǎn)數(shù)乘法和整形乘除法的效率經(jīng)驗(yàn)比較,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

最近在做一個(gè)比賽,包含了如下內(nèi)容:

環(huán)上邊的轉(zhuǎn)賬金額需要為前一條邊的轉(zhuǎn)賬金額的90%-110%(含邊界)。

對(duì)于“金額”的處理,我一開(kāi)始以浮點(diǎn)數(shù)乘法(乘1.1和0.9)外加eps修正精度的方式進(jìn)行判斷,有一位朋友看完我的代碼后提出意見(jiàn):

C*S: 如果確定只有兩位小數(shù)且不炸范圍,那么有辦法完全消除浮點(diǎn)數(shù)的使用。

然后我照著整形的方式改,結(jié)果發(fā)現(xiàn)更慢了……

于是有了如下實(shí)驗(yàn):

測(cè)試

1. 整形除法和浮點(diǎn)數(shù)乘法

我們每次把整形加減自身/10,來(lái)模擬上下浮動(dòng)10%,并把浮點(diǎn)形乘1.1(0.9)并修正eps精度誤差。

測(cè)試代碼如下:

int main()
{
    const int N=1e8;
    int64_t t1=clk();
    for(int i=0;i<N;i++)
    {
        long long x=i;
        x=x+x/10;
        x=x-x/10;
    }
    int64_t t2=clk();
    for(int i=0;i<N;i++)
    {
        double x=i;
        x=x*1.1+1e-5;
        x=x*0.9-1e-5;
    }
    int64_t t3=clk();
    cout<<"long long "<<t2-t1<<endl;
    cout<<"double "<<t3-t2<<endl;
}

結(jié)果:

long long花了1541ms,是double的幾乎十倍。

除法相較于加減乘有較大的常數(shù)。

2. 把整形預(yù)先乘10來(lái)比較

現(xiàn)在再試試另一種方法,即把0.9x<y<1.1x變成9x<10y<11x的形式,這樣不就全是整形乘法了嗎?但是三次整形乘法和兩次浮點(diǎn)乘法兩次浮點(diǎn)加減法哪個(gè)慢呢?

測(cè)試代碼如下:

int main()
{
    const int N=1e8;
    int64_t t1=clk();
    for(int i=0;i<N;i++)
    {
        long long x=i;
        x=x*11;
        x=x*9;
        x=x*10;
    }
    int64_t t2=clk();
    for(int i=0;i<N;i++)
    {
        double x=i;
        x=x*1.1+1e-5;
        x=x*0.9-1e-5;
    }
    int64_t t3=clk();
    cout<<"long long "<<t2-t1<<endl;
    cout<<"double "<<t3-t2<<endl;
}

結(jié)果:


我們可以看到,雖然單次浮點(diǎn)乘法的常數(shù)會(huì)略大于整形乘法,但是三次整形乘法還是慢于兩次浮點(diǎn)乘法的。

3. 單次浮點(diǎn)乘法和整形乘法比較

測(cè)試代碼:

int main()
{
    const int N=1e8;
    int64_t t1=clk();
    for(int i=0;i<N;i++)
    {
        long long x=i;
        x=x*11ll;
    }
    int64_t t2=clk();
    for(int i=0;i<N;i++)
    {
        double x=i;
        x=x*1.1;
    }
    int64_t t3=clk();
    cout<<"long long "<<t2-t1<<endl;
    cout<<"double "<<t3-t2<<endl;
}

結(jié)果:

我們可以看到,單次浮點(diǎn)乘法的常數(shù)大概會(huì)比整形大50%左右,所以三次整形乘法還是略慢于兩次浮點(diǎn)乘法的。

總結(jié)

這次實(shí)驗(yàn)給了我一個(gè)思路,即在對(duì)精度不敏感的情況下,可以把整形的/10之類(lèi)的除法,換成*0.1的浮點(diǎn)乘法來(lái)提速,更多關(guān)于浮點(diǎn)數(shù)乘法和整形乘除法效率的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vscode ssh遠(yuǎn)程連接服務(wù)器一直卡在下載 vscode server問(wèn)題解決

    vscode ssh遠(yuǎn)程連接服務(wù)器一直卡在下載 vscode server問(wèn)題解決

    在使用vscode使用ssh遠(yuǎn)程連接服務(wù)器時(shí),一直卡在下載"vscode 服務(wù)器"階段,本文主要介紹了vscode ssh遠(yuǎn)程連接服務(wù)器一直卡在下載 vscode server問(wèn)題解決,感興趣的可以了解一下
    2025-01-01
  • 在Qt中使用OpenGL繪制三角形指南

    在Qt中使用OpenGL繪制三角形指南

    在高性能渲染場(chǎng)景中,CPU資源常被過(guò)度消耗,導(dǎo)致界面卡頓,而OpenGL作為業(yè)界標(biāo)準(zhǔn)的圖形API,能通過(guò)GPU硬件加速顯著降低CPU負(fù)載,本文將以繪制三角形為例,教你如何通過(guò)Qt的QOpenGLWidget和QOpenGLFunctions實(shí)現(xiàn)跨平臺(tái)GPU渲染,感興趣的朋友一起看看吧
    2025-04-04
  • C++ primer類(lèi)的基礎(chǔ)精講

    C++ primer類(lèi)的基礎(chǔ)精講

    C++類(lèi),是指系統(tǒng)在第一次在程序中遇到一個(gè)類(lèi)時(shí)為這個(gè)類(lèi)建立它的所有類(lèi)變量的拷貝 - 這個(gè)類(lèi)的所有實(shí)例共享它的類(lèi)變量
    2022-07-07
  • C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容的string

    C語(yǔ)言實(shí)現(xiàn)動(dòng)態(tài)擴(kuò)容的string

    最近工作中使用C語(yǔ)言,但又苦于沒(méi)有高效的字符串實(shí)現(xiàn),字符串的拼接和裁剪都很麻煩,而且每個(gè)字符串都需要申請(qǐng)內(nèi)存,內(nèi)存的申請(qǐng)和釋放也很容易出bug,怎么高效的實(shí)現(xiàn)一個(gè)不需要處理內(nèi)存問(wèn)題并且可以動(dòng)態(tài)擴(kuò)容進(jìn)行拼接和裁剪的string呢?本文就來(lái)詳細(xì)講講
    2023-04-04
  • c++中比較好用的“黑科技”

    c++中比較好用的“黑科技”

    這篇文章主要介紹了c++中比較好用的“黑科技”,一些常用小編沒(méi)有給大家羅列出,主要給大家介紹了sort函數(shù),需要的朋友可以參考下
    2020-02-02
  • C++設(shè)計(jì)模式之職責(zé)鏈模式

    C++設(shè)計(jì)模式之職責(zé)鏈模式

    這篇文章主要介紹了C++設(shè)計(jì)模式之職責(zé)鏈模式,本文講解了什么是職責(zé)鏈模式、什么場(chǎng)合下使用、代碼實(shí)例等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語(yǔ)言 常量,變量及數(shù)據(jù)詳細(xì)介紹

    C語(yǔ)言 常量,變量及數(shù)據(jù)詳細(xì)介紹

    這篇文章主要介紹了C語(yǔ)言 常量,變量及數(shù)據(jù)詳解的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • C++構(gòu)建函數(shù)使用介紹

    C++構(gòu)建函數(shù)使用介紹

    構(gòu)造函數(shù)主要作用在于創(chuàng)建對(duì)象時(shí)為對(duì)象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動(dòng)調(diào)用,無(wú)須手動(dòng)調(diào)用;析構(gòu)函數(shù)主要作用在于對(duì)象銷(xiāo)毀前系統(tǒng)自動(dòng)調(diào)用,執(zhí)行一 些清理工作
    2022-08-08
  • 詳解C語(yǔ)言中rand函數(shù)的使用

    詳解C語(yǔ)言中rand函數(shù)的使用

    在編程時(shí)我們有時(shí)總希望自己產(chǎn)生一個(gè)隨機(jī)數(shù)字,以供使用,那么下面介紹rand函數(shù)的使用,有需要的可以參考學(xué)習(xí)。
    2016-08-08
  • C++撲克牌的洗牌發(fā)牌游戲設(shè)計(jì)

    C++撲克牌的洗牌發(fā)牌游戲設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了C++撲克牌的洗牌發(fā)牌游戲設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08

最新評(píng)論

平遥县| 兴义市| 施秉县| 辽宁省| 肥东县| 巢湖市| 泰顺县| 高清| 龙岩市| 永嘉县| 黑河市| 天气| 辽源市| 双鸭山市| 修水县| 巴彦淖尔市| 南阳市| 桂林市| 涟水县| 中卫市| 监利县| 霍林郭勒市| 南宫市| 湖州市| 合阳县| 大埔县| 涟源市| 平遥县| 常宁市| 信丰县| 凤翔县| 临沂市| 林芝县| 岳阳市| 弥勒县| 迁西县| 东平县| 沅江市| 呈贡县| 晋江市| 图木舒克市|