# HG changeset patch # User jwe # Date 1158028906 0 # Node ID 5f662c1cfbbe7c2e28d1c3fdbbe1d2b446e27634 # Parent 82a73f5dadd90ad6b8439ea81dd21c13d54d9db5 [project @ 2006-09-12 02:41:46 by jwe] diff -r 82a73f5dadd9 -r 5f662c1cfbbe src/ChangeLog --- a/src/ChangeLog Tue Sep 12 02:23:38 2006 +0000 +++ b/src/ChangeLog Tue Sep 12 02:41:46 2006 +0000 @@ -1,3 +1,8 @@ +2006-09-11 Yozo Hida + + * DLD-FUNCTIONS/gcd.cc (Fgcd): Extend range by using std::floor + instead of converting to int. + 2006-09-05 John W. Eaton * mex.cc (mxArray_sparse::as_octave_value): Cast nzmax to diff -r 82a73f5dadd9 -r 5f662c1cfbbe src/DLD-FUNCTIONS/gcd.cc --- a/src/DLD-FUNCTIONS/gcd.cc Tue Sep 12 02:23:38 2006 +0000 +++ b/src/DLD-FUNCTIONS/gcd.cc Tue Sep 12 02:41:46 2006 +0000 @@ -36,7 +36,7 @@ static inline bool is_integer_value (double x) { - return x == static_cast (static_cast (x)); + return x == std::floor (x); } DEFUN_DLD (gcd, args, nargout, @@ -166,7 +166,7 @@ while (y(0) > 0) { - RowVector r = x - y * (static_cast ( x(0) / y(0))); + RowVector r = x - y * std::floor (x(0) / y(0)); x = y; y = r; } @@ -184,9 +184,9 @@ } else if (all_args_scalar && nargout < 3) { - double g = args(0).int_value (true); + double g = args(0).double_value (); - if (error_state) + if (error_state || ! is_integer_value (g)) { error ("gcd: all arguments must be integer"); return retval; @@ -206,7 +206,7 @@ x(1) = 1; x(2) = 0; - y(0) = args(k).int_value (true); + y(0) = args(k).double_value (); y(1) = 0; y(2) = 1; @@ -214,7 +214,7 @@ y(0) = std::abs (y(0)); - if (error_state) + if (error_state || ! is_integer_value (g)) { error ("gcd: all arguments must be integer"); return retval; @@ -222,7 +222,7 @@ while (y(0) > 0) { - RowVector r = x - y * (static_cast (x(0) / y(0))); + RowVector r = x - y * std::floor (x(0) / y(0)); x = y; y = r; } @@ -290,7 +290,7 @@ while (y(0) > 0) { - RowVector r = x - y * (static_cast (x(0) / y(0))); + RowVector r = x - y * std::floor (x(0) / y(0)); x = y; y = r; }