August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
当我们最初分析理想中的计算器程序应该具有什么功能时,我们希望它能够处理取余(模)运算%,但C++语言中的模运算不支持浮点数,因而未加以实现。现在我们可以重新考虑模运算了,可按如下方式简单实现:
1.添加一个新的单词(Token)%。
2.给运算符%一个定义。
我们了解操作数为整数时运算符%的意义。例如
但若操作数不为整数时该怎么定义呢?考虑
结果应该是什么?没有一个完美的技术解决方案。但是模运算也常定义在浮点操作数上。特别是,x%y可定义为x%y=x-y*int(x/y),这样6.7%3.3==6.7-3.3*int(6.7/3.3),即0.1。这可通过标准库函数fmod()(浮点取模)来简单实现(见24.8节),需要包含头文件<cmath>。为此,在term()函数中增加以下代码:
头文件<cmath>中包含了所有的标准数学函数,例如sqrt(x)(x的平方根),abs(x)(x的绝对值),log(x)(x的自然对数值)以及pow(x,y)(x的y次方)。
或者我们可以禁止对浮点数进行模运算。当检测到参与模运算的浮点数有小数部分时,就给出错误提示信息。将模运算的操作数限定为整数,实际上是窄化转换(参见3.9.2节和5.6.4节)的变形之一,因此可以使用narrow_cast()函数解决: ...