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

Math 更改一个数字的符号以匹配另一个数字的符号,math,Math,我真的不知道该在这上面搜索什么 如果我有一个变量a=10。另一个变量B,如果B为负,我想让A=-10。如果B为正,我希望A=10 以下是我经常这样做的方式: A=A*abs(B)/B 这里明显的问题是,如果B为零,我得到一个除以零的误差 有没有更好的(最好是数学的)方法来实现这一点而不需要条件语句的复杂性 背景故事。我正在和学生们一起使用一种叫做Lego EV3的图形机器人编程语言。 上面的算法如下所示: 使用条件语句时,它如下所示: 非常浪费空间,尤其是当你在13英寸笔记本电脑屏幕上工作时

我真的不知道该在这上面搜索什么

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

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

A=A*abs(B)/B

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

有没有更好的(最好是数学的)方法来实现这一点而不需要条件语句的复杂性

背景故事。我正在和学生们一起使用一种叫做Lego EV3的图形机器人编程语言。 上面的算法如下所示:

使用条件语句时,它如下所示:


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

在许多编程语言中,一个简单的
if
语句可以:

A = 10;
if (B < 0) {
    A = -1*A;
}
A=10;
if(B<0){
A=-1*A;
}
如果您的语言支持三元表达式,我们可以将上述内容缩减为一行:

A = B < 0 ? -1*A : A;
A=B<0?-1*A:A;
另一个选项可能是定义辅助函数:

reverseSign(A, B) {
    if (B < 0) {
        return -1*A;
    }
    else {
        return A;
    }
}
反向设计(A、B){
if(B<0){
返回-1*A;
}
否则{
返回A;
}
}

为了将@MBo的评论变成一个正式的答案,请注意,许多语言都有一个名为
符号(x)
的函数,如果
x
分别为负、零或正,则返回-1、0或1,另一个函数
abs(x)
(用于绝对值)可以一起使用以实现您的目的:

A = abs(A) * sign(B)
将符号从
B
复制到
A
,如果
B≠ 0
。如果
B==0
你将不得不做一些额外的事情


许多语言(,)也有一个简单的
copysign(x,y)
函数,该函数完全满足您的需要,返回
x
修改为
y
的符号。

C99具有(POSIX)函数copysign就是这样做的。Fortran早就有了这个功能。它也是IEEE 754推荐的函数

请告诉我们您使用的是哪种语言。@TimBiegeleisen它不是一种特定的语言。它不应该太复杂以至于它很重要或者只针对一种语言。如果它很重要,我目前正在用图形语言与学生合作在添加复杂结构(如条件语句)时会变得非常庞大和混乱的编程语言。我想使用一个简单的数学语句,它是“一行程序”。(大多数数学函数都可用).嗯…语言绝对重要,特别是在这个网站上。如果你想要一行,那就考虑使用三元表达式。条件是最好的选择,IMHO。@TimBiegeleisen谢谢。三元表达式不可用。具体来说,这是Lego EV3。但是,其他图形语言如scratch也有问题。也许条件语句是唯一的方法。如果是这样的话,那很好。但是我想我可能缺少一个明显的数学方法来解决这个问题,就像我发布的内容一样。你需要这个:
A=abs(A)*符号(B)
?(注意-A变为0表示零B-但是你没有明确说明这个情况)谢谢。我明白我们可以做到这一点。但是,这两个“简单”的区别“我上面提供的解决方案和公式是大块头和几英寸的屏幕不动产。我知道这听起来很傻,但当你把图形块拼凑在一起时,很快就会变得一团糟@AppleAddity然后创建一个helper函数。这不是将符号从B复制到a。当a和B都为负数时,它将产生一个正数。@squeamishossifrage OP没有给出负数
a
。是的,但它也不排除它,特别是在查看标题时。。