float FLOAT = 1.0f;
double DOUBLE = 2.0;
float a = FLOAT / DOUBLE;
double b = FLOAT / DOUBLE;
a
和b
的计算方式是否相同?
如何在编译中转换FLOAT
和DOUBLE
?
似乎默认转化是向上转换以防止丢失。
实际上我在GPU上做了一些精确敏感的计算,代码应该是这样的:
float a = FLOAT / 2.0 + 1.0/3.0;
其中代码包含很长的表达式,包含许多数字和变量(实际上是从Matlab代码生成的)。
然后我该如何控制这种转换行为?
除了写出2.0f
之类的所有数字(表达式中有数千个数字)。
答案 0 :(得分:0)
根据C标准(6.3.1.8常规算术转换)
否则,如果任一操作数的相应实数类型为double, 另一个操作数在不更改类型域的情况下转换为a 相应实数类型为double的类型。
所以在声明的两个初始化表达式
中float a = FLOAT / DOUBLE;
double b = FLOAT / DOUBLE;
类型float
的操作数转换为类型double
。因此,表达式的结果具有类型double
。在第一个声明中,结果进一步转换为float
,因为变量a
的类型为float
。