<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近在做一個比賽,包含了如下內容:
環上邊的轉賬金額需要為前一條邊的轉賬金額的90%-110%(含邊界)。
對於“金額”的處理,我一開始以浮點數乘法(乘1.1和0.9)外加eps修正精度的方式進行判斷,有一位朋友看完我的程式碼後提出意見:
C*S: 如果確定只有兩位小數且不炸範圍,那麼有辦法完全消除浮點數的使用。
然後我照著整形的方式改,結果發現更慢了……
於是有了如下實驗:
我們每次把整形加減自身/10,來模擬上下浮動10%,並把浮點形乘1.1(0.9)並修正eps精度誤差。
測試程式碼如下:
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; }
結果:
long long花了1541ms,是double的幾乎十倍。
除法相較於加減乘有較大的常數。
現在再試試另一種方法,即把0.9x<y<1.1x變成9x<10y<11x的形式,這樣不就全是整形乘法了嗎?但是三次整形乘法和兩次浮點乘法兩次浮點加減法哪個慢呢?
測試程式碼如下:
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; }
結果:
我們可以看到,雖然單次浮點乘法的常數會略大於整形乘法,但是三次整形乘法還是慢於兩次浮點乘法的。
測試程式碼:
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; }
結果:
我們可以看到,單次浮點乘法的常數大概會比整形大50%左右,所以三次整形乘法還是略慢於兩次浮點乘法的。
這次實驗給了我一個思路,即在對精度不敏感的情況下,可以把整形的/10之類的除法,換成*0.1的浮點乘法來提速,更多關於浮點數乘法和整形乘除法效率的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45