我发现了boost::math::changesign函数,但是找不到使用它的原理。互联网使广播保持沉默,甚至Boost自己也很少使用它。
我的想法是:
-x
。但是:
changesign
和-x
https://godbolt.org/g/4ttsfW生成位相同的结果。changesign
https://godbolt.org/g/nT6j26生成更长的汇编代码。答案 0 :(得分:1)
boost::math::changesign
在其操作数上有效地工作于一个位级别:它更改符号位,并且不受操作数其他方面的影响。这与一元-
运算符不同,因为一元-
运算符是数学运算,并且可能会受到NaN值的影响(例如,如果输入为NaN,则可能会捕获)。 -
运算符是否受此类情况影响取决于实现,而boost::math::changesign
旨在更改符号,而与C ++实现无关。
无关紧要,因为C ++一元-
运算符未绑定到IEEE 754-2008中的negate
操作。换句话说,C ++表示它具有一元-
运算符并描述了其某些行为,而IEEE 754具有negate
运算符可反转符号位,但是C ++标准并不要求一元运算符-
操作符执行IEEE 754 negate
操作。此外,问题中的the link涉及一个问题,并提出警告,以确认C ++一元-
可能无法充当IEEE 754 negate
。
和3.显示了C ++可能实现的集合(或C ++可能的近似实现的集合)中的一组要点,并且没有说出存在或不存在其他行为的C ++