欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

浮點(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ì)于“金額”的處理,我一開始以浮點(diǎn)數(shù)乘法(乘1.1和0.9)外加eps修正精度的方式進(jìn)行判斷,有一位朋友看完我的代碼后提出意見:

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

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

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

測(cè)試

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

我們每次把整形加減自身/10,來模擬上下浮動(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來比較

現(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之類的除法,換成*0.1的浮點(diǎn)乘法來提速,更多關(guān)于浮點(diǎn)數(shù)乘法和整形乘除法效率的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c++實(shí)現(xiàn)LinkBlockedQueue的問題

    c++實(shí)現(xiàn)LinkBlockedQueue的問題

    這篇文章主要介紹了c++實(shí)現(xiàn)LinkBlockedQueue的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • C語言新手入門之格式化輸出和變量類型

    C語言新手入門之格式化輸出和變量類型

    這篇文章主要給大家介紹了關(guān)于C語言中格式化輸出和變量類型的相關(guān)資料,文中的教程非常適合新手零基礎(chǔ)的朋友們參考學(xué)習(xí),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 你真的理解C語言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù)

    你真的理解C語言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù)

    這篇文章主要介紹了你真的理解C語言qsort函數(shù)嗎?帶你深度剖析qsort函數(shù),本篇將引入一個(gè)庫函數(shù)來實(shí)現(xiàn)我們希望的順序,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 簡(jiǎn)單掌握C++中的函數(shù)模板

    簡(jiǎn)單掌握C++中的函數(shù)模板

    這篇文章主要介紹了C++中的函數(shù)模板,包括函數(shù)模板的聲明和生成以及異常處理等基本知識(shí),需要的朋友可以參考下
    2016-04-04
  • C++中實(shí)現(xiàn)矩陣的加法和乘法實(shí)例

    C++中實(shí)現(xiàn)矩陣的加法和乘法實(shí)例

    這篇文章主要介紹了C++中實(shí)現(xiàn)矩陣的加法和乘法實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值)

    C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(162.求數(shù)組的局部峰值),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++可變參數(shù)模板深入深剖

    C++可變參數(shù)模板深入深剖

    個(gè)可變參數(shù)模板(variadic template)就是一個(gè)接受可變數(shù)目參數(shù)的函數(shù)模板或類模板,下面這篇文章主要給大家介紹了關(guān)于C++可變參數(shù)模板的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • Matlab繪制中國地圖超全教程詳解

    Matlab繪制中國地圖超全教程詳解

    這篇文章主要介紹了如何利用Matlab繪制中國地圖,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-02-02
  • libxml教程(圖文詳解)

    libxml教程(圖文詳解)

    本篇文章是對(duì)libxm進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串)

    C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(205.同構(gòu)字符串),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評(píng)論