diff --git a/modules/calib3d/src/ap3p.cpp b/modules/calib3d/src/ap3p.cpp index 6aa771dcbaa6fd3a316d6ce54f86bd19bc2a3e22..c22a2dbbd8548268ce841eea72b156f9d609eb63 100644 --- a/modules/calib3d/src/ap3p.cpp +++ b/modules/calib3d/src/ap3p.cpp @@ -45,7 +45,13 @@ void solveQuartic(const double *factors, double *realRoots) { complex sqrt_2m = sqrt(static_cast >(-2 * p4 / 3 + t)); double B_4A = -a3 / (4 * a4); double complex1 = 4 * p4 / 3 + t; +#if defined(__clang__) && defined(__arm__) && __clang_major__ == 3 && __clang_minor__ <= 7 && !defined(__ANDROID__) + // details: https://github.com/opencv/opencv/issues/11056 + complex complex2 = 2 * q4; + complex2 = complex(complex2.real() / sqrt_2m.real(), 0); +#else complex complex2 = 2 * q4 / sqrt_2m; +#endif double sqrt_2m_rh = sqrt_2m.real() / 2; double sqrt1 = sqrt(-(complex1 + complex2)).real() / 2; realRoots[0] = B_4A + sqrt_2m_rh + sqrt1;