簡體   English   中英

在C ++中使用不同的IEEE浮點舍入模式

[英]Working with different IEEE floating-point rounding modes in C++

禍了我,我必須在GPU和CPU上確保相同的浮點結果。 好的,我理解IEEE已經照顧好我並提供了一個很好的標准來堅持幾個舍入選項; 並且CUDA部分被整理出來(有不同舍入模式的內在函數),所以這只是動機。

但是在主機端C ++代碼中 - 如何在特定的舍入模式下執行浮點運算(我的意思是在特定的語句中,而不是在我的翻譯單元中)? 是否有使用引擎蓋組件的包裝功能? 是否有一組具有不同舍入模式的浮點數代理類?

我也問了關於翻譯單元級別的同一個問題。 在編譯翻譯單元時,如何使編譯器(gcc / clang / MSVC)默認為某種舍入模式?

在@AndreasPapadopoulos的帶領下,看起來有一種改變舍入模式的官方方法

int fesetround(int round)
int fegetround()

但有幾點需要注意:

  1. 這是C ++ 11,而不是C ++ 98(雖然在實踐中你可能只是使用你的系統的<fenv.h> ,這是C99。
  2. 它需要通過#pragma與編譯器通信
  3. 這種轉換可能很慢。

我不確定它在實踐中的使用范圍有多廣(以及它周圍是否有更好的抽象,這是更常用的)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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