diff src/DLD-FUNCTIONS/betainc.cc @ 7789:82be108cc558

First attempt at single precision tyeps * * * corrections to qrupdate single precision routines * * * prefer demotion to single over promotion to double * * * Add single precision support to log2 function * * * Trivial PROJECT file update * * * Cache optimized hermitian/transpose methods * * * Add tests for tranpose/hermitian and ChangeLog entry for new transpose code
author David Bateman <dbateman@free.fr>
date Sun, 27 Apr 2008 22:34:17 +0200
parents a1dbe9d80eee
children a41df65f3f00
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/betainc.cc	Wed May 14 18:09:56 2008 +0200
+++ b/src/DLD-FUNCTIONS/betainc.cc	Sun Apr 27 22:34:17 2008 +0200
@@ -69,100 +69,206 @@
       octave_value a_arg = args(1);
       octave_value b_arg = args(2);
 
-      if (x_arg.is_scalar_type ())
+      // FIXME Can we make a template version of the duplicated code below
+      if (x_arg.is_single_type () || a_arg.is_single_type () ||
+	  b_arg.is_single_type ())
 	{
-	  double x = x_arg.double_value ();
-
-	  if (a_arg.is_scalar_type ())
+	  if (x_arg.is_scalar_type ())
 	    {
-	      double a = a_arg.double_value ();
+	      float x = x_arg.float_value ();
 
-	      if (! error_state)
+	      if (a_arg.is_scalar_type ())
 		{
-		  if (b_arg.is_scalar_type ())
+		  float a = a_arg.float_value ();
+
+		  if (! error_state)
 		    {
-		      double b = b_arg.double_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  float b = b_arg.float_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  FloatNDArray b = b_arg.float_array_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
-		  else
+		}
+	      else
+		{
+		  FloatNDArray a = a_arg.float_array_value ();
+
+		  if (! error_state)
 		    {
-		      NDArray b = b_arg.array_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  float b = b_arg.float_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  FloatNDArray b = b_arg.float_array_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
 		}
 	    }
 	  else
 	    {
-	      NDArray a = a_arg.array_value ();
+	      FloatNDArray x = x_arg.float_array_value ();
 
-	      if (! error_state)
+	      if (a_arg.is_scalar_type ())
 		{
-		  if (b_arg.is_scalar_type ())
+		  float a = a_arg.float_value ();
+
+		  if (! error_state)
 		    {
-		      double b = b_arg.double_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  float b = b_arg.float_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  FloatNDArray b = b_arg.float_array_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
-		  else
+		}
+	      else
+		{
+		  FloatNDArray a = a_arg.float_array_value ();
+
+		  if (! error_state)
 		    {
-		      NDArray b = b_arg.array_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  float b = b_arg.float_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  FloatNDArray b = b_arg.float_array_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
 		}
 	    }
 	}
       else
 	{
-	  NDArray x = x_arg.array_value ();
-
-	  if (a_arg.is_scalar_type ())
+	  if (x_arg.is_scalar_type ())
 	    {
-	      double a = a_arg.double_value ();
+	      double x = x_arg.double_value ();
 
-	      if (! error_state)
+	      if (a_arg.is_scalar_type ())
 		{
-		  if (b_arg.is_scalar_type ())
+		  double a = a_arg.double_value ();
+
+		  if (! error_state)
 		    {
-		      double b = b_arg.double_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  double b = b_arg.double_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  NDArray b = b_arg.array_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
-		  else
+		}
+	      else
+		{
+		  NDArray a = a_arg.array_value ();
+
+		  if (! error_state)
 		    {
-		      NDArray b = b_arg.array_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  double b = b_arg.double_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  NDArray b = b_arg.array_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
 		}
 	    }
 	  else
 	    {
-	      NDArray a = a_arg.array_value ();
+	      NDArray x = x_arg.array_value ();
 
-	      if (! error_state)
+	      if (a_arg.is_scalar_type ())
 		{
-		  if (b_arg.is_scalar_type ())
+		  double a = a_arg.double_value ();
+
+		  if (! error_state)
 		    {
-		      double b = b_arg.double_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  double b = b_arg.double_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  NDArray b = b_arg.array_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
-		  else
+		}
+	      else
+		{
+		  NDArray a = a_arg.array_value ();
+
+		  if (! error_state)
 		    {
-		      NDArray b = b_arg.array_value ();
+		      if (b_arg.is_scalar_type ())
+			{
+			  double b = b_arg.double_value ();
 
-		      if (! error_state)
-			retval = betainc (x, a, b);
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
+		      else
+			{
+			  NDArray b = b_arg.array_value ();
+
+			  if (! error_state)
+			    retval = betainc (x, a, b);
+			}
 		    }
 		}
 	    }