【发布时间】:2018-08-27 23:59:42
【问题描述】:
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 中写下所有数字(表达式中的数以千计)。
【问题讨论】:
-
这应该被usual arithmetic conversion覆盖。
-
你可以看看c语言中的表达式隐式类型转换,帮你解惑
-
参见Implicit type promotion rules,向下滚动到“通常的算术转换”。 (这不是这个问题的完全重复,因为它主要讲整数。)
标签: c type-conversion double implicit-conversion