[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gcl-devel] algorithm for arithmetic operations between t_ratio
From: |
Vanuxem Grégory |
Subject: |
[Gcl-devel] algorithm for arithmetic operations between t_ratio |
Date: |
Fri, 20 Aug 2004 15:39:47 +0200 |
Hi,
>From support request [support #103220]:
I tried this for for + (and - with modification) operation, but i don't
know if I had to push objects created:
case t_ratio:{
object g, num, den, num1, den1, tmp;
vs_mark;
den1 = get_gcd(x->rat.rat_den, y->rat.rat_den);
vs_push(den1);
num = integer_divide1(x->rat.rat_den, den1);
vs_push(num);
den = integer_divide1(y->rat.rat_den, den1);
vs_push(den);
num1 = number_times(den,x->rat.rat_num);
vs_push(num1);
tmp = number_times(num,y->rat.rat_num);
vs_push(tmp);
num1 = number_plus(num1, tmp); //or number_minus
vs_push(num1);
g = get_gcd(num1, den1);
vs_push(g);
num1 = integer_divide1(num1, g);
vs_push(num1);
den1 = integer_divide1(den1, g);
vs_push(den1);
tmp = number_times(den1, num);
vs_push(tmp);
den1 = number_times(tmp, den);
vs_push(den1);
if(type_of(den1) == t_fixnum && fix(den1) == 1) {
vs_reset;
return(num1);
}
z = alloc_object(t_ratio);
z->rat.rat_num = num1;
z->rat.rat_den = den1;
vs_reset;
}
return(z);
is this code correct ?
Cheers, Greg
- [Gcl-devel] algorithm for arithmetic operations between t_ratio,
Vanuxem Grégory <=