我正在寻找一个数学表达式来反转一个数字的符号,如果其他两个数字是正的。
对于单个条件x > 0,这很容易,在这种情况下,我将执行num *= sign(x)。
但是如何在有两个条件x > 0和y > 0的情况下做到这一点呢?这是不正确的:
num *= sign(-x) * sign(-y)(如果同时使用x < 0和y < 0,它也会翻转符号,这是我不想要的)。
我会想出
num *= sgn(-x) ** H(y)和
num *= 1 - 2 * H(x) * H(y)其中H是Heavyside阶跃函数,但虽然很简短,但它并不显式。
num *= (-1)^(H(x) * H(y))是好一点,但我们能更好/更短/更明确吗?
这个问题并不特定于特定的编程语言--实际上,它根本不是关于编程的,所以使用if并不是我想要的。我正在寻找类似于数学家的内嵌if的东西,我想我会在程序员论坛上找到对这个问题有最好想法的人……请告诉我我是对的;)
发布于 2020-04-16 23:35:31
编辑:正如@MarkDickinson指出的,你可以使用-sign(min(x, y))
num *= -1 * sign(min(x, y))然后:
如果两个结果都为正,则结果为-1.
1.发布于 2020-04-16 23:35:55
您可以使用ternary operator
在数学中,三元运算是n= 3的n元运算。集合A上的三元运算取A的任意给定的三个元素,并将它们组合成A的单个元素。三元运算符是一个带有三个参数的运算符。第一个参数是比较参数,第二个是真比较的结果,第三个是假比较的结果。
例如,在C++中,它将显示为:
num *= (x>0 && y>0) ? -1 : 1;它代表(condition) ? if_true : if_false。
这也适用于特殊情况x和/或y求值为0的情况,因为它不会反转符号。注sign(0)通常被定义为0,这不是您所说的您想要的行为。
https://stackoverflow.com/questions/61254069
复制相似问题