我有这段代码使用各种表达式将摄氏温度转换为华氏温度:
#include <stdio.h>
int main()
{
double temf;
double temc = 17.0;
temf = (9 / 5) * temc + 32;
printf("%g\n", temf);
temf = 9 / 5 * temc + 32;
printf("%g\n", temf);
temf = 9 * temc / 5 + 32;
printf("%g\n", temf);
temf = 32 + 9 * temc / 5;
printf("%g\n", temf);
system("pause");
return 0;
}
它返回
49
49
62.6
62.6
有人可以向我解释原因吗
(9/5) * 17.0 + 32 = 17.0 + 32
键入前2个计算时执行的实际表达式是什么?
答案 0 :(得分:4)
(9. / 5.) = 1.8
是双重分割,(9/6) = 1
是int division。
#include <stdio.h>
int main()
{
double temf;
double temc = 17.0;
temf = (9. / 5.) * temc + 32.;
printf("%g\n", temf);
temf = 9. / 5. * temc + 32.;
printf("%g\n", temf);
temf = 9. * temc / 5. + 32.;
printf("%g\n", temf);
temf = 32. + 9. * temc / 5.;
printf("%g\n", temf);
}
结果:
62.6
62.6
62.6
62.6
答案 1 :(得分:4)
在C中,你应该注意数值常量的类型,常量本身将决定它将具有什么类型。如果你写一个常量为sparse_softmax_cross_entropy_with_logits
那么它将是一个整数,如果你写9
那么它将是一个双精度,如果你写9.0
,那么它将是一个浮点数。 / p>
因此,如果您只键入9.0f
,那么它将是一个整数除法,并且将遵循整数除法的规则。整数/运算符的结果是代数商,丢弃任何小数部分。 9/5
,如果我们丢弃小数部分,那么它将是9/5 = 1.8
。 1
。
要获得正确的结果,你应该写1 * 17.0 = 17.0
,这将是两个双值的除法,结果将是1.8的双倍。