C++ 的四捨五入
C++ 的四捨五入
日期:2015/6/12
[緣起]
之前跟企劃要升級公式,他給了我一份Excel文件,乍看覺得這數字怎麼會這麼漂亮,仔細看才發現他使用了四捨五入,這還是我第一次在C++使用四捨五入,然後才發現有那麼多的問題在裡面,處理不好的話,數值的誤差就會越來越大,所以必須好好研究才行。
[四捨五入數學上的意義]
數學問題:-2.4四捨五入是多少呢?
重點:四捨五入是取概數,所以-2.4四捨五入就是-2。
[程式上的問題]
在電腦處理四捨五入的問題時,就不得不提到電腦在處理浮點數上的誤差。浮點數的特殊存法而造成的不連續性,讓浮點數的比較和0的處理變得很麻煩。
[函式庫]
C++的函式庫本身就有取概數的函式,但有些是新版的C++才有。
[自訂寫法]
網路上有太多的討論,而我認為既然數值由企畫訂,那就讓自訂函式庫的處理跟Excel相同即可。但是C++浮點數的誤差實在太大,讓我的Excel測試數值在程式裡幾乎都是錯的。因此目前還在傷腦筋中。
目前問題:
1. 浮點數的誤差,例如987654.25674無法正確顯示。
2. 必須根據需求與數值的幅度更改誤差的容忍值,所以要依真實狀況而定。
[參考資料]
浮點數的比較
http://novus.pixnet.net/blog/post/30654542-back-to-basic%3A-%E8%AB%87%E6%B5%AE%E9%BB%9E%E6%95%B8%E7%9A%84%E6%AF%94%E8%BC%83
https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
http://zhidao.baidu.com/question/1689881511890055868.html
四捨五入
http://www.mtedu.utaipei.edu.tw/mathweb/showprint.asp?topic_id=325&forum_id=51
EXCEL
http://felin0630.pixnet.net/blog/post/26209180-%E2%94%9Cexcel%E5%87%BD%E6%95%B8%E2%94%A4%E5%9B%9B%E6%8D%A8%E4%BA%94%E5%85%A5%E3%80%81%E7%84%A1%E6%A2%9D%E4%BB%B6%E9%80%B2%E4%BD%8D%E3%80%81%E7%84%A1%E6%A2%9D%E4%BB%B6
http://isvincent.pixnet.net/blog/post/31113625-excel-%E5%90%84%E7%A8%AE%E9%80%B2%E4%BD%8D%E6%96%B9%E5%BC%8F
http://www.cplusplus.com/reference/cmath/round/?kw=round
http://bbs.chinaunix.net/thread-493094-1-1.html
http://blog.csdn.net/hankai1024/article/details/7887415
http://www.programmer-club.com.tw/ShowSameTitleN/c/13497.html
https://tw.knowledge.yahoo.com/question/question?qid=1510053104474
http://www.programmer-club.com.tw/ShowSameTitleN/general/6768.html
http://edisonx.pixnet.net/blog/post/83129753-%5B%E6%B5%AE%E9%BB%9E%E6%95%B8%5D-c-c%2B%2B-%E6%B5%AE%E9%BB%9E%E6%95%B8%E7%89%B9%E6%AE%8A%E5%80%BC
https://falldog7.blogspot.com/2013/05/cc-long-long-multiply-float-overflow.html
留言
張貼留言