我正在从K&R (第二版)学习C,我对这本书早期的一个例子感到困惑。在1.5.2节中,本书首先展示了一个字符计数程序,如下所示:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}然后评论:
使用
double可能会处理更大的数字。
并展示了这一方案的替代版本:
#include <stdio.h>
/* count characters in input; 2nd version */
main()
{
double nc;
for (nc = 0; getchar() != EOF; ++nc)
;
printf("%.0f\n", nc);
}在这里使用double有意义吗?它似乎并不是这样;当然,long long会更优越,因为它可以在相同的空间中存储比双罐(不丢失精度)更大的整数,并且通过在声明时传递变量是整数来帮助提高可读性。
在这里使用double是有什么理由的吗?或者K&R示例只是简单的糟糕代码,这些代码都是用来演示double类型的吗?
发布于 2015-12-29 02:58:56
在旧的32位计算机中,使用“长长”比使用“双”更昂贵。因为使用“长长”,每个64位整数的加法都需要由2个CPU指令计算:"ADD“& "ADC”。但是,通过使用“双”,仅增加一个FPU就足以增加计数器。在IEEE-754标准中,"double“的精度为53位(1位符号+ 11位指数+ (52+1隐式)位尾数),可以表示任何在-2^53,2^53范围内的整数。
虽然在64位计算机中,通常长的长比较好,但是仍然可能有一些情况下使用“双”可以执行得更快。例如,如果启用了超线程,那么FPU和整数单元都可以由不同的线程同时进行操作。
https://stackoverflow.com/questions/34503160
复制相似问题