Dev checkpoint

db4
Phil Dawes 2009-08-17 21:37:05 +01:00
parent 149af514e6
commit a6fc19f4b0
2 changed files with 28 additions and 17 deletions

View File

@ -934,8 +934,7 @@ void bignum_divide_unsigned_large_denominator(bignum * numerator, bignum * denom
return vm->bignum_divide_unsigned_large_denominator(numerator,denominator,quotient,remainder,q_negative_p,r_negative_p); return vm->bignum_divide_unsigned_large_denominator(numerator,denominator,quotient,remainder,q_negative_p,r_negative_p);
} }
void void factorvm::bignum_divide_unsigned_normalized(bignum * u, bignum * v, bignum * q)
bignum_divide_unsigned_normalized(bignum * u, bignum * v, bignum * q)
{ {
bignum_length_type u_length = (BIGNUM_LENGTH (u)); bignum_length_type u_length = (BIGNUM_LENGTH (u));
bignum_length_type v_length = (BIGNUM_LENGTH (v)); bignum_length_type v_length = (BIGNUM_LENGTH (v));
@ -1009,11 +1008,12 @@ bignum_divide_unsigned_normalized(bignum * u, bignum * v, bignum * q)
#undef qj #undef qj
} }
bignum_digit_type void bignum_divide_unsigned_normalized(bignum * u, bignum * v, bignum * q)
bignum_divide_subtract(bignum_digit_type * v_start, {
bignum_digit_type * v_end, return vm->bignum_divide_unsigned_normalized(u,v,q);
bignum_digit_type guess, }
bignum_digit_type * u_start)
bignum_digit_type factorvm::bignum_divide_subtract(bignum_digit_type * v_start, bignum_digit_type * v_end, bignum_digit_type guess, bignum_digit_type * u_start)
{ {
bignum_digit_type * v_scan = v_start; bignum_digit_type * v_scan = v_start;
bignum_digit_type * u_scan = u_start; bignum_digit_type * u_scan = u_start;
@ -1088,14 +1088,13 @@ bignum_divide_subtract(bignum_digit_type * v_start,
return (guess - 1); return (guess - 1);
} }
bignum_digit_type bignum_divide_subtract(bignum_digit_type * v_start, bignum_digit_type * v_end, bignum_digit_type guess, bignum_digit_type * u_start)
{
return vm->bignum_divide_subtract(v_start,v_end,guess,u_start);
}
/* allocates memory */ /* allocates memory */
void void factorvm::bignum_divide_unsigned_medium_denominator(bignum * numerator,bignum_digit_type denominator, bignum * * quotient, bignum * * remainder,int q_negative_p, int r_negative_p)
bignum_divide_unsigned_medium_denominator(bignum * numerator,
bignum_digit_type denominator,
bignum * * quotient,
bignum * * remainder,
int q_negative_p,
int r_negative_p)
{ {
GC_BIGNUM(numerator); GC_BIGNUM(numerator);
@ -1153,9 +1152,12 @@ bignum_divide_unsigned_medium_denominator(bignum * numerator,
return; return;
} }
void void bignum_divide_unsigned_medium_denominator(bignum * numerator,bignum_digit_type denominator, bignum * * quotient, bignum * * remainder,int q_negative_p, int r_negative_p)
bignum_destructive_normalization(bignum * source, bignum * target, {
int shift_left) vm->bignum_divide_unsigned_medium_denominator(numerator,denominator,quotient,remainder,q_negative_p,r_negative_p);
}
void factorvm::bignum_destructive_normalization(bignum * source, bignum * target, int shift_left)
{ {
bignum_digit_type digit; bignum_digit_type digit;
bignum_digit_type * scan_source = (BIGNUM_START_PTR (source)); bignum_digit_type * scan_source = (BIGNUM_START_PTR (source));
@ -1178,6 +1180,11 @@ bignum_destructive_normalization(bignum * source, bignum * target,
return; return;
} }
void bignum_destructive_normalization(bignum * source, bignum * target, int shift_left)
{
return vm->bignum_destructive_normalization(source,target,shift_left);
}
void void
bignum_destructive_unnormalization(bignum * bignum, int shift_right) bignum_destructive_unnormalization(bignum * bignum, int shift_right)
{ {

View File

@ -77,6 +77,10 @@ struct factorvm {
void bignum_destructive_add(bignum * bignum, bignum_digit_type n); void bignum_destructive_add(bignum * bignum, bignum_digit_type n);
void bignum_destructive_scale_up(bignum * bignum, bignum_digit_type factor); void bignum_destructive_scale_up(bignum * bignum, bignum_digit_type factor);
void bignum_divide_unsigned_large_denominator(bignum * numerator, bignum * denominator, bignum * * quotient, bignum * * remainder, int q_negative_p, int r_negative_p); void bignum_divide_unsigned_large_denominator(bignum * numerator, bignum * denominator, bignum * * quotient, bignum * * remainder, int q_negative_p, int r_negative_p);
void bignum_divide_unsigned_normalized(bignum * u, bignum * v, bignum * q);
bignum_digit_type bignum_divide_subtract(bignum_digit_type * v_start, bignum_digit_type * v_end, bignum_digit_type guess, bignum_digit_type * u_start);
void bignum_divide_unsigned_medium_denominator(bignum * numerator,bignum_digit_type denominator, bignum * * quotient, bignum * * remainder,int q_negative_p, int r_negative_p);
void bignum_destructive_normalization(bignum * source, bignum * target, int shift_left);
// next method here: // next method here:
}; };