[为了娱乐,假设我们要使用c语言比较两个格式为double
的数字,并且我们只能使用使用算术运算符+, -, *, /, %
以及fabs()
和pow()
的数学方程式来检查是否等于(==
),小于(<
)和大于(>
)。与真实的关系运算符==, <, and >
相似,我们编写的代码必须为每种不同类型的检查返回True(1
)或False(0
)。
例如,without使用除+, -, *, /, %
,fabs()
和pow()
以外的任何其他运算符,如果我们确定两个变量a
和b
相等,则应返回True或1 ,否则,返回False或0。最好返回整数0和1,而不是布尔True和False。为了使事情复杂化,我们不能使用真实的关系运算符,逻辑运算符,按位运算符或任何其他运算符。此外,我们不能使用switch语句或条件语句。怎么做?
我知道如何找到x和y的较小值,也就是说x < y
可以计算为((x + y) + fabs(x-y))/2
。此外,要找到x > y
,则为((x + y) - fabs(x-y))/2
。但是,这些方程式根据比较方程式返回值x或y,我需要它们返回0或1。类似地,如果x和y相等,我需要一些代码方程式返回0或1(==
)彼此之间,并且只能使用+, -, *, /, %
,fabs()
和pow()
。
应用于+, -, *, /
操作数的任何给定运算符double
都会得到double
以及fabs()
和pow()
函数。因此,仅使用提供的运算符以及double
和integer
函数无法将fabs()
转换为pow()
。