// +++++++++++++++++++++++++++++++++++++++++++++++++++++ // +++ 自然対数の底e と 円周率π を求めるプログラム +++ // +++++++++++++++++++++++++++++++++++++++++++++++++++++ // // original maked by Y.S. // transfered(fortran to C) by G-HAL // 1995 / 09 / 16 // transfered(C to C++) by G-HAL // 1995 / 09 / 17 // transfered(DECIMAL to BINALY) by G-HAL // 1995 / 09 / 17 - 1995 / 09 / 18 // 1995 / 11 / 27 #include "EPPP_C.h" #include signed char LONGNUM::operator ==(signed short A) { signed long I; for( I=1; I<=cLENGTHs; I++) { if( NUM[I] != 0) return(0); } return( NUM[0] == A ); } void LONGNUM::operator +=(class LONGNUM A) { signed long I; unsigned long lTMP = 0; for( I=cLENGTHs; 1<=I; I--) { lTMP += NUM[I]; lTMP += A.NUM[I]; NUM[I] = (unsigned short)lTMP; lTMP >>= 16; } NUM[I] += A.NUM[I] + (unsigned short)lTMP; return; } void LONGNUM::operator -=(class LONGNUM A) { signed long I; signed long lTMP = 0; for( I=cLENGTHs; 1<=I; I--) { lTMP += NUM[I]; lTMP -= A.NUM[I]; NUM[I] = (unsigned short)lTMP; lTMP >>= 16; } NUM[I] -= A.NUM[I] + (unsigned short)lTMP; return; } void LONGNUM::operator /=(const unsigned long A) { signed long I; unsigned long t = 0; ldiv_t dived; for( I=0; I<=cLENGTHs; I++) { t += NUM[I]; dived = ldiv( t, A); NUM[I] = (unsigned short)dived.quot; t = (dived.rem) << 16; } return; } void LONGNUM::operator <<=(const unsigned char A) { signed long I; unsigned long t1 = 0, t2 = 0; for( I=cLENGTHs; 0<=I; I--) { t1 = NUM[I]; t1 <<= A; t1 |= t2; NUM[I] = (unsigned short)t1; t2 = t1 >> 16; } return; }