我想知道如何确认tcl中的两个整数是否彼此接近? 换句话说,如果两个数字之间的值差异小于或等于5,则结果通过其他FAIL。
有人可以告诉我如何在tcl中编写它吗?或者建议我使用哪个操作员来实现这一点。
谢谢, Kallesh
答案 0 :(得分:0)
两个数字a
和b
之间的差异等于$a - $b
。这种差异可以是负数也可以是正数(如果它们相等则为零),但为了使比较更容易,您需要差值的绝对值(幅度),即忽略符号的值。你可以通过abs($a - $b)
得到它。剩下要做的唯一事情就是将它与5进行比较:abs($a - $b) <= 5
。
expr
命令可以将此表达式作为参数并计算真值:如果比较计算为真,则expr {abs($a - $b) <= 5}
将返回1,否则返回0。
if
命令可以使用此表达式并将其用于算法流控制,即决定调用哪些命令以及哪些命令被跳过:
if {abs($a - $b) <= 5} {
# invoked if true
} else {
# invoked if false
}
回复:唐纳德的评论;在我原来的回答中,我犯了一个基本的错误,即在条件内expr
调用if
语句。没有必要这样做,因为if
的第一个参数无论如何都被expr
命令隐式评估。以这种方式调用expr
不会造成任何伤害,但如果有人看到它会导致一些窃笑。
答案 1 :(得分:0)
abs
函数计算一个数字的大小,即,如果它是负数,则否定它。你需要做的就是查看两个整数之间差异的大小,看看它是否在你关心的阈值之内。
if {abs($a - $b) <= 5} {
# Values are indeed "close enough"
}
这是一种标准技术;比较浮点数时它是非常常见(尽管通常使用较小的“足够接近”值;在该域中,它通常称为ε或epsilon)。