Arm Neon:isnan(val)内部

Arm Neon:isnan(val)内部,arm,simd,neon,cortex-a8,Arm,Simd,Neon,Cortex A8,我想在NEON intrinsics中使用isnan()功能。下面是我的代码:input1、input2和output是float类型。这些值是从输入图像/帧的ROI更新的。(图像处理示例) for(x=0;xIEEE-754浮点值的一个有用属性是比较两个NaN值总是返回false。您可以使用此属性测试NaN,如下所示: bool isNaN(float x) { return !(x == x); } 同样的测试也适用于SIMD操作,在SIMD操作中,可以将浮点向量与其自身进行比较,

我想在NEON intrinsics中使用
isnan()
功能。下面是我的代码:input1、input2和output是float类型。这些值是从输入图像/帧的ROI更新的。(图像处理示例)


for(x=0;xIEEE-754浮点值的一个有用属性是比较两个NaN值总是返回false。您可以使用此属性测试
NaN
,如下所示:

bool isNaN(float x)
{
    return !(x == x);
}
同样的测试也适用于SIMD操作,在SIMD操作中,可以将浮点向量与其自身进行比较,对于
NaN
的任何元素,结果都将为假,例如:

float32x4_t vx = { ... };

uint32x4_t vcmp = vceqq_f32(vx, vx);

对于
x
中的非
NaN
值和
false
0
)而言,
vcmp
的元素将为
true
UINT\u MAX
)对于任何
NaN
值。

IEEE-754浮点值的一个有用属性是比较两个NaN值总是返回false。您可以使用此属性测试
NaN
,如下所示:

bool isNaN(float x)
{
    return !(x == x);
}
同样的测试也适用于SIMD操作,在SIMD操作中,可以将浮点向量与其自身进行比较,对于
NaN
的任何元素,结果都将为假,例如:

float32x4_t vx = { ... };

uint32x4_t vcmp = vceqq_f32(vx, vx);

对于
x
中的非
NaN
值和
false
0
)而言,
vcmp
的元素将为
true
UINT\u MAX
)对于任何
NaN
值。

在这种情况下,您告诉我像check a==a,每次都是正确的。那么这个怎么能像isnan一样工作呢?Paul R,请您举个小例子详细说明一下。这对我会有帮助。@PaulR sqrt(-1)=sqrt(-1)?这个条件你能用你的逻辑来解释我吗?在这种情况下,你说的像检查a==a,每次都是正确的。那么这个条件怎么能像isnan一样工作呢?Paul R,你能举个小例子来详细说明吗?这对我会有帮助。@PaulR sqrt(-1)=sqrt(-1)?这个条件你能用你的逻辑来解释我吗