是否有标准标志函数 /signum, sgn/ 在 C/C++?
我需要一个返回的函数 -1 对于负数和 +1 对于正数。
http://en.wikipedia.org/wiki/Sign_function
很容易写自己,但它看起来像是应该在标准库中的某个地方。
Edit: 特别是,我正在寻找在浮子上运行的函数。
http://en.wikipedia.org/wiki/Sign_function
很容易写自己,但它看起来像是应该在标准库中的某个地方。
Edit: 特别是,我正在寻找在浮子上运行的函数。
没有找到相关结果
已邀请:
10 个回复
冰洋
赞同来自:
好处:
实际上有所实施 signum /-1, 0 或者 1/. 在这里实现帮助 copysign 只返回值 -1 或者 1, 这不是 signum. 此外,这里有一些实现返回 float /或者 T/, 但不是 int, 看起来似乎是浪费的。
适用于整数,floats,重复的无符号短路,或任何用户类型的razagaging与数字 0 并订购。
快速地!
- 它很慢,特别是如果你需要促进然后再缩小。 它没有分支,完美优化
遵守! h bitshift 它小心,但仅适用于某些位表示,并且在您有未保存的类型时不起作用。 如有必要,可以作为手动专业化提供。
当然! 与零进行简单的比较可以保持机器的内部高精度呈现 /例如, 80 少量 x87/ 并避免过早舍入到零。
注意:
这是一种模式,所以它的汇编将需要一个全部。
显然,有些人认为使用一个新的,有点深奥和非常慢的标准库函数,
哪个甚至没有实施 signum
, 更能理解。
验证的一部分
打电话给警告 GCC
在没有符号的类型为类型创建实例时。 可以使用一些过载可以避免这一点:
/第一次警告的一个很好的例子是什么。/
</t></typename></typename></typename></typename>
小明明
赞同来自:
以下是一种更可读的方式来实现这一点:
如果您喜欢Ternary操作员,您可以执行以下操作:
小明明
赞同来自:
给你一个结果 + / - 1.0, 取决于值的值。 请注意,浮点零有一个标志: /+0/ 灰尘 +1, 和 /-0/ 灰尘 -1.
詹大官人
赞同来自:
是否有标准标志函数 /signum, sgn/ 在 C/C++?
不在标准图书馆 , 但是,有
http://en.cppreference.com/w/c ... ysign
, 这可以以几乎相同的方式使用
, 并且有一个功能 true sign 在
http://www.boost.org/doc/libs/ ... .html
, 这也可以是标准的一部分。
http://www.boost.org/doc/libs/ ... .html
</class></boost>
快网
赞同来自:
标准
功能 C++
.
小姐请别说爱
赞同来自:
是的,具体取决于定义。
C99 后来有一个宏
在
/真正的浮动
/;
宏
返回非零值,然后只有当其参数值的符号为负。 C11 §7.12.3.6
但仍然 OP 想要一些不同的东西。
我需要一个返回的函数 -1 对于负数和 +1 对于正数。 ... 现场在浮子上运行。
更深的
:
在以下情况下,该位置不具体。
.
古典
https://en.wikipedia.org/wiki/Sign_function
回报
在
,
在
和
在
.
许多答案已经涵盖了这个问题,但不影响
. 其中许多是整数 point-of-view, 通常不包含 Not-a-Numbers /
https://en.wikipedia.org/wiki/NaN
/ 和
https://en.wikipedia.org/wiki/Signed_zero
.
典型的答案函数
在
, 他们回来了
.
相反,提供此功能:ON
他回来了
.
</math.h>
二哥
赞同来自:
知食
赞同来自:
http://graphics.stanford.edu/~ ... rSign
在这个页面上,太多了其他有趣的东西,太聪明了......
诸葛浮云
赞同来自:
http://www.opengroup.org/onlin ... .html
/回报 true, 如果他的论点有负符号/.
我不知道为什么你特别想回来 -1 或者 +1; copysign 更方便
为此,但似乎他会回来 +1 对于某些平台上的负零
仅部分支持负零,在哪里 signbit 可能是回归 true.
莫问
赞同来自:
相当亲密,是的?