[PATCH] msvcrt: Add fallback implementations for Bessel functions

Piotr Caban piotr.caban at gmail.com
Fri Mar 2 08:31:56 CST 2018


Hi Alex,

On 03/02/18 05:13, Alex Henrie wrote:
>   /*********************************************************************
> @@ -1429,8 +1437,18 @@ double CDECL MSVCRT__j1(double num)
>    */
>   double CDECL MSVCRT__jn(int n, double num)
>   {
> +  double retval;
>     /* FIXME: errno handling */
> -  return jn(n, num);
> +#ifdef HAVE_JN
> +  retval = jn(n, num);
> +#else
> +  if (n == 0) return MSVCRT__j0(num);
> +  if (n == 1) return MSVCRT__j1(num);
> +  retval = sqrt(2 / (M_PI * num)) * cos(num - (n / 2.0 + 0.25) * M_PI);
> +  if (retval < -1) return -1;
> +  if (retval > 1) return 1;
> +#endif
> +  return retval;
>   }
This approximation can only be used for values in specific range to give 
reasonable results. There are similar problems with j0, j1 fallbacks (I 
haven't checked other functions).

I think it's better to print FIXME instead of adding very inaccurate 
fallback. Taking in account the functions are probably mainly used for 
physics related computations I guess it's better to avoid inaccurate 
implementation at all.

Thanks,
Piotr



More information about the wine-devel mailing list