C如何处理混合精度操作

时间:2018-03-19 12:15:30

标签: c type-conversion double implicit-conversion

float  FLOAT  = 1.0f;
double DOUBLE = 2.0;

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

ab的计算方式是否相同?

如何在编译中转换FLOATDOUBLE

似乎默认转化是向上转换以防止丢失。

实际上我在GPU上做了一些精确敏感的计算,代码应该是这样的:

float a = FLOAT / 2.0 + 1.0/3.0;

其中代码包含很长的表达式,包含许多数字和变量(实际上是从Matlab代码生成的)。

然后我该如何控制这种转换行为? 除了写出2.0f之类的所有数字(表达式中有数千个数字)。

1 个答案:

答案 0 :(得分:0)

根据C标准(6.3.1.8常规算术转换)

  

否则,如果任一操作数的相应实数类型为double,   另一个操作数在不更改类型域的情况下转换为a   相应实数类型为double的类型。

所以在声明的两个初始化表达式

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

类型float的操作数转换为类型double。因此,表达式的结果具有类型double。在第一个声明中,结果进一步转换为float,因为变量a的类型为float