更改一个数字的符号以匹配另一个数字的符号

时间:2018-11-28 06:58:14

标签: math

我不太确定该搜索什么。

如果我有一个变量A = 10,另一个变量B。如果B为负,我想使A = -10。如果B为正,我希望A = 10。

这是我经常这样做的方式:

A = A * abs(B)/ B

这里明显的问题是,如果B为零,我将得到除以零的误差。

在没有条件语句的复杂性的情况下,有没有更好的方法(最好是数学方法)?

背景故事。我正在用一种称为Lego EV3的图形化机器人编程语言与学生合作。 上面的算法如下:

enter image description here

使用条件语句,它看起来像这样: enter image description here

非常浪费空间,尤其是当您在13英寸笔记本电脑的屏幕上工作时。而且令人困惑。

3 个答案:

答案 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++Javapython)也具有简单的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推荐的功能