ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
生成表格式数据是能够从循环机制受益的事情之一。举个例子,在计算机成为常用设备之前,人们必须手工计算对数、正余弦以及其他常用的数学函数。为使这类工作更简单,产生了一些书,包含了一些长表格,你可以查出不同函数的值。创建这些表的工作是缓慢而繁琐的,而且结果容易大量出错。 当计算机登上了历史舞台,人们最初的反应是:“太棒了!我们可以用计算机准确无误的生成这些表。”这是个(大部分)正确但短视的看法。没多久,计算机和计算器普及,数学表就过时了。 好吧,应该说基本上过时了。事实上对于某些运算,计算机使用数学表得到一个近似的答案,然后执行计算去改进这个近似解。有些情况下,计算机背后的数学表是有误差的,最著名的就是最初的因特尔奔腾计算浮点除法使用的表。 对数表已经不像以前那么有用了,但它仍然是一个不错的迭代示例。下面这段程序在左边一栏输出一列值,在右边一栏输出其对应的一列对数值: ~~~ double x = 1.0; while (x < 10.0) { cout << x << "\t" << log(x) << "\n"; x = x + 1.0; } ~~~ 字符序列\t表示制表符。字符序列\n表示换行符。这些字符序列可以出现在字符串的任意位置,而在此例中,字符串中只有这类字符序列。 ~~~ 制表符使光标右移至制表结束位置,通常是每8字节制表一次。稍后我们将看到制表符的用途—使多列文本排列整齐。 换行符的作用与endl完全一样,即移动光标到下一行。通常情况,如果换行符单独出现,我就用endl;如果作为字符串的一部分出现,我就用\n。 上面一段程序的输出: 1 0 2 0.693147 3 1.09861 4 1.38629 5 1.60944 6 1.79176 7 1.94591 8 2.07944 9 2.19722 ~~~ 要是看着上面这些数很奇怪,别忘了log函数是以e为底的。计算机科学中2的幂很重要,因此我们常常要计算以2为底的对数,我们可以通过以下公式实现: 输出语句改为: ~~~ cout << x << "\t" << log(x) / log(2.0) << endl; ~~~ 输出: ~~~ 1 0 2 1 3 1.58496 4 2 5 2.32193 6 2.58496 7 2.80735 8 3 9 3.16993 ~~~ 可以看到,第1、2、4、8行为2的整数次幂。如果想求2的其他整数次幂,我们可以修改程序如下: ~~~ double x = 1.0; while (x < 100.0) { cout << x << "\t" << log(x) / log(2.0) << endl; x = x * 2.0; } ~~~ 之前的循环中,我们用一个数去加x,输出一个算术序列;现在我们改用一个数去乘x,输出一个几何级序列。输出结果是: ~~~ 1 0 2 1 4 2 8 3 16 4 32 5 64 6 ~~~ 由于我们在列之间使用的是制表符,所以第二列的位置也就不取决于第一列的数字位数了。 ~~~ 对数表也许不再有用,但对于和2的整数次幂打交道的计算机科学家而言,则是非常有用。下面出一道习题:修改上面这段程序,使之能一直输出到65536(2^16)。把程序打出来并记住它。 ~~~