预处理器块中定义的typedef的C类型转换

预处理器块中定义的typedef的C类型转换,c,c-preprocessor,typedef,C,C Preprocessor,Typedef,我正在尝试修复此编译器警告: warning C4244: '=' : conversion from 'double' to 'myRealVar', possible loss of data myRealVar在预处理器块中定义: #ifdef SINGLE_PRECISION typedef float myRealVar; #else typedef double myRealVar; #endif 警告出现在大致如下所示的行上: someVar[a][b] = 1.0/sqrt(

我正在尝试修复此编译器警告:

warning C4244: '=' : conversion from 'double' to 'myRealVar', possible loss of data
myRealVar在预处理器块中定义:

#ifdef SINGLE_PRECISION
typedef float myRealVar;
#else
typedef double myRealVar;
#endif
警告出现在大致如下所示的行上:

someVar[a][b] = 1.0/sqrt(someVar[a][b]);

我尝试过C风格的类型转换:(myRealVar),但这似乎并不能解决警告问题。我应该如何妥善解决这个问题

编辑: 这就成功了。谢谢风向标和奥拉夫。不知道为什么我以前在C-casting的尝试没有成功

someVar[a][b] = (myRealVar)(1.0/sqrt(someVar[a][b]));

您需要强制转换
1.0
以及
sqrt
中的返回值,以删除警告。两者都有类型
double

someVar[a][b] = (myRealVar)1.0 / (myRealVar)sqrt(someVar[a][b]);

你试过的C型演员是什么?请添加它好吗?
1.0
的类型为
double
“我已经尝试了C风格的类型转换:(myRealVar)但这似乎无法解决警告问题”-我没有看到该转换。您的帐户在哪里?很抱歉,您有什么理由使用
float
?无论如何,
double
在99.99%的情况下都是首选类型,如果更高的精度不是优先考虑的,并且您正在开发一个大型系统,那么使用float而不是double可以减少内存开销,因为float是4字节,double是8字节。为什么不将除法保留为
double
,然后强制转换结果呢?以更高的精度执行所有中间计算是一种良好的做法。