C语言:使用计算初始化浮点变量

我没有用任何语言做过很多浮点数学编程,更不用说C语言了

我正在写一个温度转换程序作为练习,我有一个关于浮点数的问题。我有一个代码框架,如下所示。在这两种情况下,当P_华氏温度为&lt&燃气轮机;32.0. 但是,如果我在计算中使用CF3系数,则LOC VERRKKKS!!!:-)

这对我来说似乎很明显,但是。。。此编译器依赖于还是初始化时需要强制转换运算符?顺便说一句,我使用严格遵守ASNI和ISO标准的C/C++编译器在IBMiSeries平台上编写此代码

提前感谢您提供的任何信息

马丁库斯特

定义CF3 5/9;
浮子Conv2Celsius(浮子P_华氏度)
{
浮动Temp1、Temp2、Temp3;
浮动ConvAdj=32.0;
浮点数CF1=0.555556;
浮动CF2=5/9;
//[°C]=([°F]-32)×5/9
温度1=(华氏温度-ConvAdj)*CF1;
温度2=(华氏温度-ConvAdj)*CF2;
温度3=(华氏温度-ConvAdj)*CF3;
返回(温度);
}

让我们仔细看看

float CF1=0.555556;
温度1=(华氏温度-ConvAdj)*CF1;
//同
温度1=(华氏温度-ConvAdj)*(浮动)0.555556;
浮动CF2=5/9;
温度2=(华氏温度-ConvAdj)*CF2;
//同
浮点数CF2=0;//5/9是整数除法
温度2=(华氏温度-ConvAdj)*0;
#定义CF3 5/9
温度3=(华氏温度-ConvAdj)*CF3;
//同
温度3=(华氏温度-ConvAdj)*5/9;
温度3=(华氏温度-ConvAdj)*5.0f/9;
//^--浮点乘法-----^
//同
温度3=(华氏温度-ConvAdj)*5.0f/9.0f;
//^---浮点除法-----------------------------

Temp3”;VERRKKKS“;因为它不是按5/9缩放的。相反,它是代码行中的文本替换,因此乘以5,然后除以9

Temp3是正确的,是三者中最好的。
Temp1几乎是正确的,不像*5.0f/9.0f那样精确*(float)0.55555 6
Temp2是错误的,因为答案总是0,即使不应该是0


我有一个代码框架,如下所示。在这两种情况下,当P_华氏温度为&lt&燃气轮机;32.0

Temp1不是0.0


若要将常数中的微小附加误差放在一边,请使用至少9个带浮点f后缀的数字

//float CF1=0.555556;
浮动CF1=0.556F;

建议更换

浮点Conv2Celsius(浮点华氏温度){
浮动ConvAdj=32.0f;
浮动CF=5.0f/9.0f;//或0.556f
//[°C]=([°F]-32)×5/9
返回(P_华氏温度-ConvAdj)*CF;
}              

发表评论