![](/img/trans.png)
[英]Is there any definition how floating-point values evaluated at compile-time are rounded?
[英]How to compile parts of code with different floating-point options?
我正在使用英特爾編譯器優化一些 C++ 代碼,我需要在單個源文件中的某些代碼部分使用不同的編譯選項。
我知道#pragma pack
指令可以更改結構成員的 alignment 內部代碼,但我想知道是否還有其他選項的其他指令。
就我而言,我正在使用/fp:precise
選項編譯我的代碼,但我想在代碼的某些部分使用/fp:fast
。
您可以使用#pragma float_control
( MSVC
和英特爾® C++ 編譯器都支持)為特定函數select一些浮點選項。
但是,請注意鏈接文檔中給出的重要警告:
float_control pragma 與 /fp 編譯器選項的行為不同。 float_control pragma 僅控制部分浮點行為。 它必須與 fp_contract 和 fenv_access pragma 結合使用以重新創建/fp編譯器選項...
使用這個和相關的#pragma
指令將允許您在具有不同選項的單個翻譯單元中編譯代碼段。
根據鏈接文檔中顯示的表格(就在引用文本下方), /fp:precise
和/fp:fast
之間的唯一區別是由float_control
pragma 控制(但您需要其他人從/fp:strict
切換) ,因此如下代碼將允許給定源文件中的一個 function 使用fast
選項:
#pragma float_control( precise, off, push ) // Save current setting and turn off /fp:precise
double FastFloatFunc(double x)
{
double y = x * (x - 1);
// Do something: Generated code will use /fp:fast
return y;
}
#pragma float_control(pop) // Restore file's default settings
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.