为什么没有一元运算符来获得乘法逆?0-x = -x ... 1 / x =?

liv*_*ide 0 c++ operator-keyword

在C / C ++中,有一元减号运算符,它返回算术类型的加法逆(至少在大多数情况下),即

int x = 2, y = 2;
assert(x + (-x) == 0);
Run Code Online (Sandbox Code Playgroud)

从数学的角度来看,编写-x或0-x无关紧要,但是从程序员的角度来看,确实如此。通常,用于评估-x的指令序列与用于评估0-x的指令序列不同!尽管只是语法糖,但在C ++中使用一元减运算符确实有意义。那么一元运算符是否返回乘法逆,不是吗?但是,为什么C ++(像许多(大多数?所有?)语言一样)缺少这样的运算符?

编辑:

我的主要观点是,计算数字x的逆数(加法或乘法)不需要计算机处理中性元素(分别为0或1)。实际上,0和1对于计算机而言并非无关紧要的实体。对于浮点类型(例如C中的float或double),虽然评估0.0-x或1.0 / x相当“简单”(此处精度仍然是一个大问题),但总体上它可能变得相当复杂。喜欢多。精度浮点类型0.0-x比-x复杂得多,因此-x不仅方便,而且生成更有效的代码。另一方面,必须引入像inv(x)或x.inv()之类的函数或通过乘法实现相同的功能(乘法逆),而不是仅仅为1.0 / x编写/ x ...

Guv*_*nte 5

因为在数学中没有一元乘法逆符号。

您可以将其表示为一个x^-11/x两个都可以在C ++中关闭(尽管以power回的方式进行处理)。

一元否定仅因存在于数学中而存在。

  • @livingissuicide:与此不同,一元否定是公认的公认标准。Heck甚至Haskell都非常费劲地将其包含在编译器中。相反,您建议的是返回到编译器的唯一符号。这种事情的功能成本是天文数字,特别是当您考虑C ++过度使用符号的程度时。 (3认同)
  • 我希望在C / C ++中有一个用于“运行我的线性回归算法”的运算符,为什么他们不将其包含在该死的语言中! (2认同)