【发布时间】:2015-11-08 14:47:44
【问题描述】:
如何去除 c/c++ 中的“负零”? 我正在尝试这个-
#define isEq(a, b) ((abs(a-b)<EPS) ? 1 : 0)
#define NegZero(x) (x = isEq(x, -0.0) ? 0 : x)
是否安全且安全? 或者 还有其他简单安全的方法吗? 专门用于竞赛编码。 请帮忙....
【问题讨论】:
-
x == 0 && signbit(x)怎么样? -
安全吗?不,因为它是一个宏。如果您想要安全,请使用内联函数。
-
没有C/C++语言!选择一个。
-
了解为什么您要删除它们可能会有所帮助。你能举一个你遇到的问题的例子,解决方案是将负零变成正零吗?目前,我只写
static inline NegZero(double x) { if (x == 0.0) { return 0.0; } else { return x; } },因为AFAIK、-0.0 == +0.0在C 和C++ 中必须始终为真。 -
@Olaf:
EPS可能代表“Epsilon”,按照惯例,它标识了一个(通常很小的)值,它定义了一个差异的阈值,例如,a一般限制:en.wikipedia.org/wiki/%28%CE%B5,_%CE%B4%29-definition_of_limit
标签: c++ macros negative-zero