}
if (wert >= 0) {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 32)) \
- if (!((i+1)*intDsize <= 32) \
+ if ((bn_minlength <= i) && (i*intDsize <= 32) \
+ && (!((i+1)*intDsize <= 32) \
|| ((uint32)wert < (uint32)bitc(i*intDsize-1)) \
- )
+ ) )
#if (intDsize <= 32)
IF_LENGTH(1)
bignum1:
#undef IF_LENGTH
} else {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 32)) \
- if (!((i+1)*intDsize <= 32) \
+ if ((bn_minlength <= i) && (i*intDsize <= 32) \
+ && (!((i+1)*intDsize <= 32) \
|| ((uint32)wert >= (uint32)(-bitc(i*intDsize-1))) \
- )
+ ) )
#if (intDsize <= 32)
IF_LENGTH(1)
goto bignum1;
#endif
if (wert_hi >= 0) {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 64)) \
- if (!((i+1)*intDsize <= 64) \
+ if ((bn_minlength <= i) && (i*intDsize <= 64) \
+ && (!((i+1)*intDsize <= 64) \
|| (i*intDsize-1 < 32 \
? ((wert_hi == 0) && (wert_lo < (uint32)bitc(i*intDsize-1))) \
: ((uint32)wert_hi < (uint32)bitc(i*intDsize-1-32)) \
- ) )
+ ) ) )
#define ALLOC(i) \
var cl_heap_bignum* ptr = allocate_bignum(i);
#define OK \
#undef IF_LENGTH
} else {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 64)) \
- if (!((i+1)*intDsize <= 64) \
+ if ((bn_minlength <= i) && (i*intDsize <= 64) \
+ && (!((i+1)*intDsize <= 64) \
|| (i*intDsize-1 < 32 \
? ((wert_hi == ~(sint32)0) && (wert_lo >= (uint32)(-bitc(i*intDsize-1)))) \
: ((uint32)wert_hi >= (uint32)(-bitc(i*intDsize-1-32))) \
- ) )
+ ) ) )
IF_LENGTH(1)
goto bignum1;
#if (intDsize <= 32)
// (dessen Länge bn_minlength <= n <= ceiling(32/intDsize) erfüllt)
if (wert >= 0) {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 64)) \
- if (!((i+1)*intDsize <= 64) \
+ if ((bn_minlength <= i) && (i*intDsize <= 64) \
+ && (!((i+1)*intDsize <= 64) \
|| ((uint64)wert < ((uint64)1 << (i*intDsize-1))) \
- )
+ ) )
IF_LENGTH(1)
bignum1:
{ var cl_heap_bignum* ptr = allocate_bignum(1);
#undef IF_LENGTH
} else {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 64)) \
- if (!((i+1)*intDsize <= 64) \
+ if ((bn_minlength <= i) && (i*intDsize <= 64) \
+ && (!((i+1)*intDsize <= 64) \
|| ((uint64)wert >= ((uint64)(-1) << (i*intDsize-1))) \
- )
+ ) )
IF_LENGTH(1)
goto bignum1;
#if (intDsize <= 32)
#endif
if (wert_hi >= 0) {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 128)) \
- if (!((i+1)*intDsize <= 128) \
+ if ((bn_minlength <= i) && (i*intDsize <= 128) \
+ && (!((i+1)*intDsize <= 128) \
|| (i*intDsize-1 < 64 \
? ((wert_hi == 0) && (wert_lo < (uint64)bitc(i*intDsize-1))) \
: ((uint64)wert_hi < (uint64)bitc(i*intDsize-1-64)) \
- ) )
+ ) ) )
#define ALLOC(i) \
var cl_heap_bignum* ptr = allocate_bignum(i);
#define OK \
#undef IF_LENGTH
} else {
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i*intDsize <= 128)) \
- if (!((i+1)*intDsize <= 128) \
+ if ((bn_minlength <= i) && (i*intDsize <= 128) \
+ && (!((i+1)*intDsize <= 128) \
|| (i*intDsize-1 < 64 \
? ((wert_hi == ~(sint64)0) && (wert_lo >= (uint64)(-bitc(i*intDsize-1)))) \
: ((uint64)wert_hi >= (uint64)(-bitc(i*intDsize-1-64))) \
- ) )
+ ) ) )
IF_LENGTH(1)
goto bignum1;
IF_LENGTH(2)
// (dessen Länge bn_minlength <= n <= ceiling((32+1)/intDsize) erfüllt)
#define UL_maxlength ceiling(32+1,intDsize)
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i <= UL_maxlength)) \
- if (!(i+1 <= UL_maxlength) \
+ if ((bn_minlength <= i) && (i <= UL_maxlength) \
+ && (!(i+1 <= UL_maxlength) \
|| ((uint32)wert < (uint32)bitc(i*intDsize-1)) \
- )
+ ) )
IF_LENGTH(1)
{ var cl_heap_bignum* ptr = allocate_bignum(1);
arrayLSref(ptr->data,1,0) = wert;
#define FILL_9 FILL_1_DIGIT(9,8,0); FILL_4_DIGIT(9,4,wert_hi); FILL_4_DIGIT(9,0,wert_lo);
#endif
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i <= UL2_maxlength)) \
- if (!(i+1 <= UL2_maxlength) \
+ if ((bn_minlength <= i) && (i <= UL2_maxlength) \
+ && (!(i+1 <= UL2_maxlength) \
|| (i*intDsize-1 < 32 \
? ((wert_hi == 0) && (wert_lo < (uint32)bitc(i*intDsize-1))) \
: (wert_hi < (uint32)bitc(i*intDsize-1-32)) \
- ) )
+ ) ) )
#define ALLOC(i) \
var cl_heap_bignum* ptr = allocate_bignum(i);
#define OK \
// (dessen Länge bn_minlength <= n <= ceiling((32+1)/intDsize) erfüllt)
#define UQ_maxlength ceiling(64+1,intDsize)
#define IF_LENGTH(i) \
- if ((bn_minlength <= i) && (i <= UQ_maxlength)) \
- if (!(i+1 <= UQ_maxlength) \
+ if ((bn_minlength <= i) && (i <= UQ_maxlength) \
+ && (!(i+1 <= UQ_maxlength) \
|| ((uint64)wert < ((uint64)1 << (i*intDsize-1 < 64 ? i*intDsize-1 : 0))) \
- )
+ ) )
IF_LENGTH(1)
{ var cl_heap_bignum* ptr = allocate_bignum(1);
arrayLSref(ptr->data,1,0) = (uintD)wert;
if ((sintD)mspref(arrayMSDptr(bn->data,len),0) >= 0) {
// Bignum > 0
#define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
- if (len == i) /* genau i Digits? */ \
- /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
- if ( (i*intDsize > 32) \
- && ( ((i-1)*intDsize >= 32) \
- || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(31-(i-1)*intDsize)) \
- ) ) \
- goto bad; \
- else
+ if ((bn_minlength <= i) /* genau i Digits überhaupt möglich? */ \
+ && (len == i) /* genau i Digits? */ \
+ /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
+ && ( (i*intDsize > 32) \
+ && ( ((i-1)*intDsize >= 32) \
+ || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(31-(i-1)*intDsize)) \
+ ) ) ) \
+ goto bad; \
+ else
IF_LENGTH(1)
return get_uint1D_Dptr(arrayLSDptr(bn->data,1));
IF_LENGTH(2)
} else {
// Bignum < 0
#define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
- if (len == i) /* genau i Digits? */ \
- /* - 2^(i*intDsize-1) <= obj < - 2^((i-1)*intDsize-1) */ \
- if ( (i*intDsize > 32) \
- && ( ((i-1)*intDsize >= 32) \
- || (mspref(arrayMSDptr(bn->data,len),0) < (uintD)(-bitc(31-(i-1)*intDsize))) \
- ) ) \
- goto bad; \
- else
+ if ((bn_minlength <= i) /* genau i Digits überhaupt möglich? */ \
+ && (len == i) /* genau i Digits? */ \
+ /* - 2^(i*intDsize-1) <= obj < - 2^((i-1)*intDsize-1) */ \
+ && ( (i*intDsize > 32) \
+ && ( ((i-1)*intDsize >= 32) \
+ || (mspref(arrayMSDptr(bn->data,len),0) < (uintD)(-bitc(31-(i-1)*intDsize))) \
+ ) ) ) \
+ goto bad; \
+ else
IF_LENGTH(1)
return get_sint1D_Dptr(arrayLSDptr(bn->data,1));
IF_LENGTH(2)
if ((sintD)mspref(arrayMSDptr(bn->data,len),0) >= 0) {
// Bignum > 0
#define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
- if (len == i) /* genau i Digits? */ \
- /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
- if ( (i*intDsize > 64) \
- && ( ((i-1)*intDsize >= 64) \
- || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(63-(i-1)*intDsize)) \
- ) ) \
- goto bad; \
- else
+ if ((bn_minlength <= i) /* genau i Digits überhaupt möglich? */ \
+ && (len == i) /* genau i Digits? */ \
+ /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
+ && ( (i*intDsize > 64) \
+ && ( ((i-1)*intDsize >= 64) \
+ || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(63-(i-1)*intDsize)) \
+ ) ) ) \
+ goto bad; \
+ else
#if (intDsize==64)
IF_LENGTH(1)
return (uint64)arrayLSref(bn->data,1,0);
} else {
// Bignum < 0
#define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
- if (len == i) /* genau i Digits? */ \
- /* - 2^(i*intDsize-1) <= obj < - 2^((i-1)*intDsize-1) */ \
- if ( (i*intDsize > 64) \
- && ( ((i-1)*intDsize >= 64) \
- || (mspref(arrayMSDptr(bn->data,len),0) < (uintD)(-bitc(63-(i-1)*intDsize))) \
- ) ) \
- goto bad; \
- else
+ if ((bn_minlength <= i) /* genau i Digits überhaupt möglich? */ \
+ && (len == i) /* genau i Digits? */ \
+ /* - 2^(i*intDsize-1) <= obj < - 2^((i-1)*intDsize-1) */ \
+ && ( (i*intDsize > 64) \
+ && ( ((i-1)*intDsize >= 64) \
+ || (mspref(arrayMSDptr(bn->data,len),0) < (uintD)(-bitc(63-(i-1)*intDsize))) \
+ ) ) ) \
+ goto bad; \
+ else
#if (intDsize==64)
IF_LENGTH(1)
return (sint64)arrayLSref(bn->data,1,0);
var uintC len = bn->length;
if ((sintD)mspref(arrayMSDptr(bn->data,len),0) < 0)
goto bad;
- #define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
- if (len == i) /* genau i Digits? */ \
- /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
- if ( (i*intDsize-1 > 32) \
- && ( ((i-1)*intDsize-1 >= 32) \
- || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(32-(i-1)*intDsize)) \
- ) ) \
- goto bad; \
- else
+ #define IF_LENGTH(i) \
+ if ((bn_minlength <= i) /* genau i Digits überhaupt möglich? */ \
+ && (len == i) /* genau i Digits? */ \
+ /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
+ && ( (i*intDsize-1 > 32) \
+ && ( ((i-1)*intDsize-1 >= 32) \
+ || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(32-(i-1)*intDsize)) \
+ ) ) ) \
+ goto bad; \
+ else
IF_LENGTH(1)
return get_uint1D_Dptr(arrayLSDptr(bn->data,1));
IF_LENGTH(2)
if ((sintD)mspref(arrayMSDptr(bn->data,len),0) < 0)
goto bad;
#define IF_LENGTH(i) \
- if (bn_minlength <= i) /* genau i Digits überhaupt möglich? */\
- if (len == i) /* genau i Digits? */ \
- /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
- if ( (i*intDsize-1 > 64) \
- && ( ((i-1)*intDsize-1 >= 64) \
- || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(64-(i-1)*intDsize)) \
- ) ) \
- goto bad; \
- else
+ if ((bn_minlength <= i) /* genau i Digits überhaupt möglich? */ \
+ && (len == i) /* genau i Digits? */ \
+ /* 2^((i-1)*intDsize-1) <= obj < 2^(i*intDsize-1) */ \
+ && ( (i*intDsize-1 > 64) \
+ && ( ((i-1)*intDsize-1 >= 64) \
+ || (mspref(arrayMSDptr(bn->data,len),0) >= (uintD)bitc(64-(i-1)*intDsize)) \
+ ) ) ) \
+ goto bad; \
+ else
#if (intDsize==64)
IF_LENGTH(1)
return (uint64)arrayLSref(bn->data,1,0);