【发布时间】:2011-02-23 23:20:15
【问题描述】:
我不太清楚为什么我不能这样做
double a = (double) my_Function(45) / 2048 / 2340 / 90;
printf("%.4f",a); // prints out 0.00
但我必须使用另外一个变量:
double a = (double) my_Function(45);
double b = a / 2048 / 2340 / 90;
printf("%.4f",b); // prints out the correct value
【问题讨论】:
-
为什么要投射到
float而不是double?而第二个答案中的第二个演员什么也不做。 -
我可以问你为什么要对这些看似神奇的数字 2048、2340 和 90 进行硬编码吗?也许你可以
#define MAGIC (2048 * 2340 * 90)或const int MAGIC = 2048 * 2340 * 90和((double) my_Function(45)) / MAGIC来简化未来的事情。或者,如果它们应该是单独的常量,您仍然可以使用该技术为它们命名,以帮助其他人理解代码在做什么。 -
这两个代码块应该产生相同的结果(“正确”值)。您确定在此处复制代码没有出错吗?
-
在几乎所有情况下,两个版本的代码都会产生完全相同的结果。要么你的编译器坏了,要么(更有可能)你对问题的描述不准确(假代码)。
-
@Chris Lutz:感谢您的建议!