|
|
1.1 ! root 1: double ! 2: modf(arg,ent) ! 3: double arg; ! 4: double *ent; ! 5: { ! 6: int neg; ! 7: int i; ! 8: double two30 = 1073741824.; ! 9: double big = 72057594037927936.; /*2^56*/ ! 10: double x, temp; ! 11: double ldexp(); ! 12: double frexp(); ! 13: long l; ! 14: ! 15: neg = 1; ! 16: if(arg<0){ ! 17: neg = -1; ! 18: arg = -arg; ! 19: } ! 20: if(arg>big){ ! 21: *ent = neg*arg; ! 22: return(0); ! 23: } ! 24: if(arg<1){ ! 25: *ent = 0; ! 26: return(neg*arg); ! 27: } ! 28: ! 29: temp = 0; ! 30: while(arg>two30){ ! 31: x = frexp(arg,&i); ! 32: if(arg<0.5){ ! 33: arg = 2*arg; ! 34: i = i-1; ! 35: } ! 36: x = ldexp(0.5,i); ! 37: arg = arg - x; ! 38: temp = temp + x; ! 39: } ! 40: ! 41: l = arg; ! 42: arg = arg-l; ! 43: temp = temp+l; ! 44: *ent = neg*temp; ! 45: return(neg*arg); ! 46: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.