Mercurial > octave
diff src/ov-intx.h @ 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 | 99c410f7f0b0 |
children | f336dd8e96d0 |
line wrap: on
line diff
--- a/src/ov-intx.h Wed May 14 18:09:56 2008 +0200 +++ b/src/ov-intx.h Sun Apr 27 22:34:17 2008 +0200 @@ -111,8 +111,29 @@ } + float + float_value (bool = false) const + { + float retval = lo_ieee_float_nan_value (); + + if (numel () > 0) + { + gripe_implicit_conversion ("Octave:array-as-scalar", + type_name (), "real scalar"); + + retval = matrix(0).float_value (); + } + else + gripe_invalid_conversion (type_name (), "real scalar"); + + return retval; + + } + double scalar_value (bool = false) const { return double_value (); } + float float_scalar_value (bool = false) const { return float_value (); } + Matrix matrix_value (bool = false) const { @@ -131,6 +152,24 @@ return retval; } + FloatMatrix + float_matrix_value (bool = false) const + { + FloatMatrix retval; + dim_vector dv = dims (); + if (dv.length () > 2) + error ("invalid conversion of %s to FloatMatrix", type_name().c_str ()); + else + { + retval = FloatMatrix (dv(0), dv(1)); + float *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = matrix(i).float_value (); + } + return retval; + } + ComplexMatrix complex_matrix_value (bool = false) const { @@ -149,6 +188,24 @@ return retval; } + FloatComplexMatrix + float_complex_matrix_value (bool = false) const + { + FloatComplexMatrix retval; + dim_vector dv = dims(); + if (dv.length () > 2) + error ("invalid conversion of %s to FloatMatrix", type_name().c_str ()); + else + { + retval = FloatComplexMatrix (dv(0), dv(1)); + FloatComplex *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = FloatComplex (matrix(i).float_value ()); + } + return retval; + } + NDArray array_value (bool = false) const { @@ -160,6 +217,17 @@ return retval; } + FloatNDArray + float_array_value (bool = false) const + { + FloatNDArray retval (matrix.dims ()); + float *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = matrix(i).float_value (); + return retval; + } + ComplexNDArray complex_array_value (bool = false) const { @@ -171,6 +239,17 @@ return retval; } + FloatComplexNDArray + float_complex_array_value (bool = false) const + { + FloatComplexNDArray retval (matrix.dims ()); + FloatComplex *vec = retval.fortran_vec (); + octave_idx_type nel = matrix.numel (); + for (octave_idx_type i = 0; i < nel; i++) + vec[i] = FloatComplex (matrix(i).float_value ()); + return retval; + } + boolNDArray bool_array_value (bool warn = false) const { @@ -403,8 +482,12 @@ double double_value (bool = false) const { return scalar.double_value (); } + float float_value (bool = false) const { return scalar.float_value (); } + double scalar_value (bool = false) const { return scalar.double_value (); } + float float_scalar_value (bool = false) const { return scalar.float_value (); } + Matrix matrix_value (bool = false) const { @@ -413,6 +496,14 @@ return retval; } + FloatMatrix + float_matrix_value (bool = false) const + { + FloatMatrix retval (1, 1); + retval(0,0) = scalar.float_value (); + return retval; + } + ComplexMatrix complex_matrix_value (bool = false) const { @@ -421,6 +512,13 @@ return retval; } + FloatComplexMatrix + float_complex_matrix_value (bool = false) const + { + FloatComplexMatrix retval (1, 1); + retval(0,0) = FloatComplex (scalar.float_value ()); + return retval; + } NDArray array_value (bool = false) const @@ -430,11 +528,27 @@ return retval; } + FloatNDArray + float_array_value (bool = false) const + { + FloatNDArray retval (dim_vector (1, 1)); + retval(0) = scalar.float_value (); + return retval; + } + ComplexNDArray complex_array_value (bool = false) const { ComplexNDArray retval (dim_vector (1, 1)); - retval(0) = Complex (scalar.double_value ()); + retval(0) = FloatComplex (scalar.double_value ()); + return retval; + } + + FloatComplexNDArray + float_complex_array_value (bool = false) const + { + FloatComplexNDArray retval (dim_vector (1, 1)); + retval(0) = FloatComplex (scalar.float_value ()); return retval; }