我不太确定该搜索什么。
如果我有一个变量A = 10,另一个变量B。如果B为负,我想使A = -10。如果B为正,我希望A = 10。
这是我经常这样做的方式:
A = A * abs(B)/ B
这里明显的问题是,如果B为零,我将得到除以零的误差。
在没有条件语句的复杂性的情况下,有没有更好的方法(最好是数学方法)?
背景故事。我正在用一种称为Lego EV3的图形化机器人编程语言与学生合作。 上面的算法如下:
非常浪费空间,尤其是当您在13英寸笔记本电脑的屏幕上工作时。而且令人困惑。
答案 0 :(得分:1)
只是将@MBo的评论转变为正式答案,请注意,许多语言都有一个名为sign(x)
或signum(x)
的函数,如果x
为负,则返回-1、0或1。 ,零或正数,以及可以一起使用以实现您的目的的另一个函数abs(x)
(用于绝对值):
A = abs(A) * sign(B)
将把符号从B
复制到A
。如果 B ≠ 0
。如果B == 0
,您将不得不做一些额外的事情。
许多语言(C++,Java,python)也具有简单的copysign(x, y)
函数,该函数可以完全满足您的需求,返回的x
修改为y
的标志。
答案 1 :(得分:0)
在许多编程语言中,一个简单的if
语句将起作用:
A = 10;
if (B < 0) {
A = -1*A;
}
如果您的语言支持三元表达式,我们可以将以上内容简化为一行:
A = B < 0 ? -1*A : A;
另一个选择可能是定义一个辅助函数:
reverseSign(A, B) {
if (B < 0) {
return -1*A;
}
else {
return A;
}
}
答案 2 :(得分:0)
C99具有(POSIX)函数copysign即可执行此操作。 Fortran已有很长时间了。这也是IEEE 754推荐的功能