簡體   English   中英

C如何處理混合精度運算

[英]How does C handle mixed precision operation

float  FLOAT  = 1.0f;
double DOUBLE = 2.0;

float  a = FLOAT / DOUBLE;
double b = FLOAT / DOUBLE;

ab是否a相同的方式計算?

如何在編譯時轉換FLOATDOUBLE

似乎默認轉換是上轉換,以防止丟失。

實際上,我正在對精度敏感的GPU上進行一些計算,並且代碼應如下所示:

float a = FLOAT / 2.0 + 1.0/3.0;

該代碼包含非常長的表達式,其中包含許多數字和var(實際上是從Matlab代碼生成的)。

那我該如何控制這種轉換行為呢? 除了將所有數字2.0f (表達式中的數千個數字)。

根據C標准(6.3.1.8常規算術轉換)

否則,如果一個操作數的相應實型為double,則將另一個操作數轉換為相應實型為double的類型,而不會改變類型域。

所以在聲明的兩個初始化表達式中

float  a = FLOAT / DOUBLE;
double b = FLOAT / DOUBLE;

float類型的操作數將轉換為double類型。 因此,表達式的結果具有double類型。 在第一個聲明中,結果進一步轉換為float因為變量a具有float類型。

暫無
暫無

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

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