可能的溢出C.

时间:2013-10-23 14:23:17

标签: c overflow

我有几个变量如下:

int cpu_time_b  = 6
float clock_cycles_a = 2 * pow(10, 10));
float cpi_a = 2.0;
int cycle_time_a = 250;
float cpi_b = 1.2;
int cycle_time_b = 500 

我正在计算b的时钟频率,计算如下:

(((1.2*clock_cycles_a)/cpu_time_b)/(1 * pow(10, 9)))

显然答案应该是4但是我的程序输出6000000204800000000.0作为答案

我认为溢出可能发生在这里。是这种情况,如果是这样,我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:1)

应进行所有计算以确保可比较的数字“减少”在一起。在你的例子中,它似乎只是

  

cpu_time_b

是真正的变量(在你的代码片段范围内未定义。所有其他变量都显示为常量。所有常量应在编译之前计算,特别是如果它们容易导致溢出。

  

clock_cycles_a

取消分母。 pow是耗时的(在这里可能不是关键)并且并不总是那么精确。当你声明clock_cycles_a然后在下面使用1.2时,你明确地乘以2。减少整个事物只保留实际变量:

  

24.0 / cpu_time_b

这让我推断出cpu_time_b应该是6?

最后,当你写出等式时,我们不知道你对结果做了什么。将它存储在错误的变量类型中? printf格式错误?等?

相关问题