Mercurial > octave
changeset 24911:8d6f3941a118 stable
Support single precision in sinint/cosint.
sinint.m: support single precision.
cosint.m: support single precision.
author | Colin Macdonald <cbm@m.fsf.org> |
---|---|
date | Tue, 23 Jan 2018 20:17:25 -0800 |
parents | b98755ef7572 |
children | 08c871c4147b |
files | scripts/specfun/cosint.m scripts/specfun/sinint.m |
diffstat | 2 files changed, 18 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/scripts/specfun/cosint.m Tue Jan 23 15:19:24 2018 -0800 +++ b/scripts/specfun/cosint.m Tue Jan 23 20:17:25 2018 -0800 @@ -78,7 +78,8 @@ sz = size (x); x = x(:); - y = zeros (size (x)); + y = zeros (size (x), class (x)); + tol = eps (class (x)); i_miss = true (length (x), 1); @@ -117,7 +118,7 @@ while ((any (flag_sum)) && (it < maxit)); ssum .*= - xx .^ 2 * (2 * it) / ((2 * it + 2) ^ 2 * (2 * it + 1)); yy(flag_sum) += ssum (flag_sum); - flag_sum = (abs (ssum) >= eps); + flag_sum = (abs (ssum) >= tol); it++; endwhile @@ -140,6 +141,9 @@ %!assert (cosint (0), - Inf) %!assert (cosint (inf), 0) %!assert (cosint (-inf), 1i * pi) +%!assert (isnan (cosint (nan))) + +%!assert (class (cosint (single (1))), "single") ##tests against maple %!assert (cosint (1), 0.337403922900968135, -2*eps) @@ -196,4 +200,6 @@ %! -8.63307471207423322 + 3.13159298695312800*I %! 0.0698222284673061493 - 3.11847446254772946*I ]; %! B = cosint (x); -%! assert (A, B, -6e-16) +%! assert (A, B, -3*eps) +%! B = cosint (single (x)); +%! assert (A, B, -3*eps ("single"))
--- a/scripts/specfun/sinint.m Tue Jan 23 15:19:24 2018 -0800 +++ b/scripts/specfun/sinint.m Tue Jan 23 20:17:25 2018 -0800 @@ -57,7 +57,8 @@ sz = size (x); x = x(:); - y = zeros (size (x)); + y = zeros (size (x), class (x)); + tol = eps (class (x)); i_miss = true (length (x), 1); @@ -93,7 +94,7 @@ while ((any (flag_sum)) && (it < maxit)); ssum .*= - xx .^ 2 * (2 * it + 1) / ((2 * it + 3) ^ 2 * (2 * it + 2)); yy(flag_sum) += ssum (flag_sum); - flag_sum = (abs (ssum) >= eps); + flag_sum = (abs (ssum) >= tol); it++; endwhile @@ -124,6 +125,9 @@ %!assert (sinint (0), 0) %!assert (sinint (inf), pi/2) %!assert (sinint (-inf), -pi/2) +%!assert (isnan (sinint (nan))) + +%!assert (class (sinint (single (1))), "single") ##tests against maple %!assert (sinint (1), 0.9460830703671830149414, -2*eps) @@ -182,4 +186,6 @@ %! -0.000099999999944461111128 + 0.99999999833338888972e-6*1i %! -1.5386156269726011209 - 0.053969388020443786229*1i ]; %! B = sinint (x); -%! assert (A, B, -6e-16) +%! assert (A, B, -3*eps) +%! B = sinint (single (x)); +%! assert (A, B, -3*eps ("single"))