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"))