提交 f3a03aef 编写于 作者: R Rostislav Vasilikhin

cvIsInf(double) fix + regression test

上级 6a7d54f5
...@@ -295,7 +295,7 @@ CV_INLINE int cvIsInf( double value ) ...@@ -295,7 +295,7 @@ CV_INLINE int cvIsInf( double value )
#elif defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__PPC64__) #elif defined(__x86_64__) || defined(_M_X64) || defined(__aarch64__) || defined(_M_ARM64) || defined(__PPC64__)
Cv64suf ieee754; Cv64suf ieee754;
ieee754.f = value; ieee754.f = value;
return (ieee754.u & 0x7fffffff00000000) == return (ieee754.u & 0x7fffffffffffffff) ==
0x7ff0000000000000; 0x7ff0000000000000;
#else #else
Cv64suf ieee754; Cv64suf ieee754;
......
...@@ -3992,6 +3992,13 @@ TEST(Core_FastMath, InlineNaN) ...@@ -3992,6 +3992,13 @@ TEST(Core_FastMath, InlineNaN)
EXPECT_EQ( cvIsNaN((double) NAN), 1); EXPECT_EQ( cvIsNaN((double) NAN), 1);
EXPECT_EQ( cvIsNaN((double) -NAN), 1); EXPECT_EQ( cvIsNaN((double) -NAN), 1);
EXPECT_EQ( cvIsNaN(0.0), 0); EXPECT_EQ( cvIsNaN(0.0), 0);
// Regression: check the +/-Inf cases
Cv64suf suf;
suf.u = 0x7FF0000000000000UL;
EXPECT_EQ( cvIsNaN(suf.f), 0);
suf.u = 0xFFF0000000000000UL;
EXPECT_EQ( cvIsNaN(suf.f), 0);
} }
TEST(Core_FastMath, InlineIsInf) TEST(Core_FastMath, InlineIsInf)
...@@ -4003,6 +4010,13 @@ TEST(Core_FastMath, InlineIsInf) ...@@ -4003,6 +4010,13 @@ TEST(Core_FastMath, InlineIsInf)
EXPECT_EQ( cvIsInf((double) HUGE_VAL), 1); EXPECT_EQ( cvIsInf((double) HUGE_VAL), 1);
EXPECT_EQ( cvIsInf((double) -HUGE_VAL), 1); EXPECT_EQ( cvIsInf((double) -HUGE_VAL), 1);
EXPECT_EQ( cvIsInf(0.0), 0); EXPECT_EQ( cvIsInf(0.0), 0);
// Regression: check the cases of 0x7FF00000xxxxxxxx
Cv64suf suf;
suf.u = 0x7FF0000000000001UL;
EXPECT_EQ( cvIsInf(suf.f), 0);
suf.u = 0x7FF0000012345678UL;
EXPECT_EQ( cvIsInf(suf.f), 0);
} }
}} // namespace }} // namespace
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册