霓虹灯:isnan(val) 内在函数
Neon: isnan(val) intrinsics
我想在 NEON 内在函数中使用 isnan()
功能。下面是我的代码:input1、input2 和输出类型为 float。这些值是根据输入 image/frame 的 ROI 更新的。(图像处理示例)
for(x = 0;x<ht;x++){
for(y = 0;y<width;y++){
float a = (input1[x + (y * width)]);
float b = (input2[x + (y * width)]);
// check for division by zero
output = 0.0f;
if (!(isnan(a) | isnan(b) | (b == 0)))
{
output[x + (y * width)] = a / b;
}
}
}
通过使用 newton Raphson 方法,我尝试使用 neon intrinsic 进行除法。
但是我无法获得 isnan
的任何内在函数。我得到的 __builtin_isnan
() 不是内在函数。如何将 isnan
用于 float32x4_t a
和 float32x4_t b
一个有用的 属性 IEEE-754 浮点值是比较两个 NaN 值总是 returns 假。您可以使用此 属性 来测试 NaN
,如下所示:
bool isNaN(float x)
{
return !(x == x);
}
同样的测试可以应用于 SIMD 操作,其中可以将浮点向量与其自身进行比较,并且对于 NaN
的任何元素,结果将为 false,例如
float32x4_t vx = { ... };
uint32x4_t vcmp = vceqq_f32(vx, vx);
对于 x
中的非 NaN
值和 false
( 0
) 对于任何 NaN
值。
我想在 NEON 内在函数中使用 isnan()
功能。下面是我的代码:input1、input2 和输出类型为 float。这些值是根据输入 image/frame 的 ROI 更新的。(图像处理示例)
for(x = 0;x<ht;x++){
for(y = 0;y<width;y++){
float a = (input1[x + (y * width)]);
float b = (input2[x + (y * width)]);
// check for division by zero
output = 0.0f;
if (!(isnan(a) | isnan(b) | (b == 0)))
{
output[x + (y * width)] = a / b;
}
}
}
通过使用 newton Raphson 方法,我尝试使用 neon intrinsic 进行除法。
但是我无法获得 isnan
的任何内在函数。我得到的 __builtin_isnan
() 不是内在函数。如何将 isnan
用于 float32x4_t a
和 float32x4_t b
一个有用的 属性 IEEE-754 浮点值是比较两个 NaN 值总是 returns 假。您可以使用此 属性 来测试 NaN
,如下所示:
bool isNaN(float x)
{
return !(x == x);
}
同样的测试可以应用于 SIMD 操作,其中可以将浮点向量与其自身进行比较,并且对于 NaN
的任何元素,结果将为 false,例如
float32x4_t vx = { ... };
uint32x4_t vcmp = vceqq_f32(vx, vx);
对于 x
中的非 NaN
值和 false
( 0
) 对于任何 NaN
值。