0

我在下面列出了几个变量:

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 作为答案

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

4

1 回答 1

1

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

cpu_time_b

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

clock_cycles_a

取消分母。pow 很耗时(在这里可能并不重要),而且并不总是那么精确。当您声明 clock_cycles_a 然后使用下面的 1.2 时,您明确地将 2 相乘。等等。减少只保留实际变量的整个事情变成:

24.0/cpu_time_b

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

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

于 2013-10-23T14:43:26.110 回答