簡體   English   中英

如何解決 gcc 中的 c++ std::rintf 問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM