diff --git a/include/bx/inline/math.inl b/include/bx/inline/math.inl index b7296c0..f582363 100644 --- a/include/bx/inline/math.inl +++ b/include/bx/inline/math.inl @@ -215,8 +215,13 @@ namespace bx inline float rsqrtSimd(float _a) { + if (_a < kNearZero) + { + return 0.0f; + } + const simd128_t aa = simd_splat(_a); - const simd128_t rsqrta = simd_rsqrt(aa); + const simd128_t rsqrta = simd_rsqrt_nr(aa); float result; simd_stx(&result, rsqrta); diff --git a/tests/math_bench.cpp b/tests/math_bench.cpp index 9a66c01..195b5f5 100644 --- a/tests/math_bench.cpp +++ b/tests/math_bench.cpp @@ -41,38 +41,38 @@ void math_bench() bx::WriterI* writer = bx::getStdOut(); bx::writePrintf(writer, "Math bench\n\n"); - mathTest< ::sqrtf >("::sqrtf"); + mathTest< ::sqrtf >(" ::sqrtf"); mathTest("bx::sqrtRef"); mathTest("bx::sqrtSimd"); mathTest("bx::sqrt"); bx::writePrintf(writer, "\n"); - mathTest< ::rsqrt >("::rsqrtf"); - mathTest("bx::sqrtRef"); - mathTest("bx::sqrtSimd"); + mathTest< ::rsqrt >(" ::rsqrtf"); + mathTest("bx::rsqrtRef"); + mathTest("bx::rsqrtSimd"); mathTest("bx::rsqrt"); bx::writePrintf(writer, "\n"); - mathTest< ::sinf >("::sinf"); + mathTest< ::sinf >(" ::sinf"); mathTest("bx::sin"); bx::writePrintf(writer, "\n"); - mathTest< ::asinf>("::asinf"); + mathTest< ::asinf>(" ::asinf"); mathTest("bx::asin"); bx::writePrintf(writer, "\n"); - mathTest< ::cosf >("::cosf"); + mathTest< ::cosf >(" ::cosf"); mathTest("bx::cos"); bx::writePrintf(writer, "\n"); - mathTest< ::acosf>("::acosf"); + mathTest< ::acosf>(" ::acosf"); mathTest("bx::acos"); bx::writePrintf(writer, "\n"); - mathTest< ::tanf >("::tanf"); + mathTest< ::tanf >(" ::tanf"); mathTest("bx::tan"); bx::writePrintf(writer, "\n"); - mathTest< ::atanf>("::atanf"); + mathTest< ::atanf>(" ::atanf"); mathTest("bx::atan"); }