我正在寻找一个数学表达式来反转一个数字的符号,如果其他两个数字是正的。
对于单个条件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.https://stackoverflow.com/questions/61254069
复制相似问题