[英]How can I solve c++ std::rintf issue in gcc
我不明白,為什么std::rintf
返回以下結果(g++ 7.3.0):
cout << rintf(14.5f) << endl;
cout << rintf(15.5f) << endl;
cout << rintf(16.5f) << endl;
結果:
14
16
16
源數字可以精確地存儲在浮點數中,所以這不應該是一個計算問題。
我檢查了源代碼,它使用__builtin_rintf
。
當然,我可以編寫自己的函數,但是這個問題讓我感到不安。
這就是“庄家四舍五入”,也稱為“四舍五入”。 問題是 x.5 的值正好介於 x 和 x+1 之間。 有很多可能的方法來處理這樣的舍入值。 舍入到偶數舍入到偶數,所以 14.5 變成 14,15.5 變成 16,16.5 變成 16。我聽說在一堆計算中這減少了累積舍入誤差。
其他可能性包括向 0 舍入:14.5 變為 14,-14.5 變為 -14; 向負無窮大舍入(向下舍入):14.5 變為 14,-14.5 變為 -15; 從 0 開始舍入:14.5 變為 15,-14.5 變為 -15; 向正無窮大舍入(向上舍入):14.5 變為 15,-14.5 變為 -14。
通常有一種方法可以選擇舍入模式,但標准 C++ 不解決舍入問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.