我们习惯性认为计算机在计算是不会出错,可事实并非如此。本章节第1节举出了一个例子“将0.1累加100次的结果不是10”。C语言程序结果得出10.000002。但出现这种去看并不是计算机故障或者程序编写错误的原因。想了解为什么出现错误,就要做到计算机是如何处理小数的。第2节告诉我们如何用二进制表示小数,如下图所示:
在计算机中,小数并不是像我们日常使用的十进制那样直接表示的,而是被转换成了二进制形式。然而,并非所有的小数都能被精确地转换为二进制数,这就导致了计算机在处理某些小数时会出现误差。这种误差可能非常微小,但在某些情况下,它可能会累积并导致显著的计算错误。那如何避免计算机计算出错呢?第7节给出了两种方法:1.回避策略,也就是忽略错误。因为根据程序的用途,有时候计算结果的微小误差并不会产生实际的问题。2.用整数代替小数进行计算。我们可以在计算时临时使用整数,然后将计算结果用小数表示。
此外这一章告诉我们什么是浮点数。浮点数将小数分为符号、尾数、基数和指数4个部分来表示。如图所示:
总的来说,《程序是怎样跑起来的》的第三章为我们揭示了计算机在计算小数时可能出错的原因和机制。这不仅增加了我们对计算机科学的理解,也提醒我们在编程时要时刻关注潜在的计算误差。我相信,这些知识将对我未来的编程实践产生深远的影响。