* complex.c: continues to support canonicalization *unofficially*
for an odd library mathn for the time being (only 1.9.x). since grand mathn is must be very very special library for us. * rational.c: ditto. * ext/mathn/*/*: follow the above changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d563f1680c
commit
2b72e549a7
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
Tue Oct 28 23:05:35 2008 Tadayoshi Funaba <tadf@dotrb.org>
|
||||||
|
|
||||||
|
* complex.c: continues to support canonicalization *unofficially*
|
||||||
|
for an odd library mathn for the time being (only 1.9.x).
|
||||||
|
since grand mathn is must be very very special library for us.
|
||||||
|
|
||||||
|
* rational.c: ditto.
|
||||||
|
|
||||||
|
* ext/mathn/*/*: follow the above changes.
|
||||||
|
|
||||||
Tue Oct 28 21:31:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
Tue Oct 28 21:31:55 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
||||||
|
|
||||||
* parse.y (parser_yylex): check EOF explicitly.
|
* parse.y (parser_yylex): check EOF explicitly.
|
||||||
|
18
complex.c
18
complex.c
@ -320,7 +320,19 @@ f_complex_new_bang2(VALUE klass, VALUE x, VALUE y)
|
|||||||
return nucomp_s_new_internal(klass, x, y);
|
return nucomp_s_new_internal(klass, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define f_unify_p(klass) rb_const_defined(klass, id_Unify)
|
#if RUBY_VERSION_CODE < 200
|
||||||
|
#define CANON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CANON
|
||||||
|
static int canonicalization = 0;
|
||||||
|
|
||||||
|
void
|
||||||
|
nucomp_canonicalize(int f)
|
||||||
|
{
|
||||||
|
canonicalization = f;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline static void
|
inline static void
|
||||||
nucomp_real_check(VALUE num)
|
nucomp_real_check(VALUE num)
|
||||||
@ -343,10 +355,10 @@ nucomp_s_canonicalize_internal(VALUE klass, VALUE real, VALUE imag)
|
|||||||
#ifdef CANON
|
#ifdef CANON
|
||||||
#define CL_CANON
|
#define CL_CANON
|
||||||
#ifdef CL_CANON
|
#ifdef CL_CANON
|
||||||
if (f_zero_p(imag) && k_exact_p(imag) && f_unify_p(klass))
|
if (f_zero_p(imag) && k_exact_p(imag) && canonicalization)
|
||||||
return real;
|
return real;
|
||||||
#else
|
#else
|
||||||
if (f_zero_p(imag) && f_unify_p(klass))
|
if (f_zero_p(imag) && canonicalization)
|
||||||
return real;
|
return real;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,3 @@
|
|||||||
require "mkmf"
|
require "mkmf"
|
||||||
|
|
||||||
$CPPFLAGS = "-DEXT_MATHN -DCANON -DCLCANON "
|
|
||||||
|
|
||||||
create_makefile "mathn/complex"
|
create_makefile "mathn/complex"
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
require "mkmf"
|
require "mkmf"
|
||||||
|
|
||||||
$CPPFLAGS = "-DEXT_MATHN -DCANON -DCLCANON"
|
|
||||||
|
|
||||||
create_makefile "mathn/rational"
|
create_makefile "mathn/rational"
|
||||||
|
File diff suppressed because it is too large
Load Diff
18
rational.c
18
rational.c
@ -377,7 +377,19 @@ f_rational_new_bang2(VALUE klass, VALUE x, VALUE y)
|
|||||||
return nurat_s_new_internal(klass, x, y);
|
return nurat_s_new_internal(klass, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define f_unify_p(klass) rb_const_defined(klass, id_Unify)
|
#if RUBY_VERSION_CODE < 200
|
||||||
|
#define CANON
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CANON
|
||||||
|
static int canonicalization = 0;
|
||||||
|
|
||||||
|
void
|
||||||
|
nurat_canonicalize(int f)
|
||||||
|
{
|
||||||
|
canonicalization = f;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline static void
|
inline static void
|
||||||
nurat_int_check(VALUE num)
|
nurat_int_check(VALUE num)
|
||||||
@ -421,7 +433,7 @@ nurat_s_canonicalize_internal(VALUE klass, VALUE num, VALUE den)
|
|||||||
den = f_idiv(den, gcd);
|
den = f_idiv(den, gcd);
|
||||||
|
|
||||||
#ifdef CANON
|
#ifdef CANON
|
||||||
if (f_one_p(den) && f_unify_p(klass))
|
if (f_one_p(den) && canonicalization)
|
||||||
return num;
|
return num;
|
||||||
#endif
|
#endif
|
||||||
return nurat_s_new_internal(klass, num, den);
|
return nurat_s_new_internal(klass, num, den);
|
||||||
@ -441,7 +453,7 @@ nurat_s_canonicalize_internal_no_reduce(VALUE klass, VALUE num, VALUE den)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CANON
|
#ifdef CANON
|
||||||
if (f_one_p(den) && f_unify_p(klass))
|
if (f_one_p(den) && canonicalization)
|
||||||
return num;
|
return num;
|
||||||
#endif
|
#endif
|
||||||
return nurat_s_new_internal(klass, num, den);
|
return nurat_s_new_internal(klass, num, den);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user