|
|
1.1 ! root 1: program fpexceptions(input,output); ! 2: type ! 3: fperrorkind = ( fperrorfirst, ! 4: overflow,underflow,divideby0,domain, ! 5: fperrolast ); ! 6: var ! 7: request : fperrorkind; ! 8: procedure genoverflow; ! 9: var ! 10: i : integer; ! 11: r : real; ! 12: begin ! 13: r := 2.0; ! 14: for i := 1 to 1000 do begin ! 15: r := r * r; ! 16: end; ! 17: writeln('this machine handles more than 2^1000'); ! 18: end; ! 19: procedure genunderflow; ! 20: var ! 21: i : integer; ! 22: r : real; ! 23: begin ! 24: r := 0.5; ! 25: for i := 1 to 1000 do begin ! 26: r := r * r; ! 27: end; ! 28: writeln('this machine handles more than 2^-1000'); ! 29: end; ! 30: procedure gendivideby0; ! 31: var ! 32: r : real; ! 33: begin ! 34: r := 17.0; ! 35: r := r - r; {should be 0.0} ! 36: r := 17.0 / r; ! 37: writeln('i wonder what r is?', r); ! 38: end; ! 39: procedure gendomain; ! 40: var ! 41: r : real; ! 42: begin ! 43: r := -17.0; ! 44: r := sqrt(r); ! 45: writeln('i wonder what r is?', r); ! 46: end; ! 47: begin ! 48: write('which do you want ('); ! 49: for request := succ(fperrorfirst) to pred(fperrolast) do begin ! 50: {this isn't standard pascal.} ! 51: write( ' ', request); ! 52: end; ! 53: write(' ): '); ! 54: {neither is this, but it sure is convenient.} ! 55: readln(request); ! 56: if request in [overflow,underflow,divideby0,domain] then begin ! 57: writeln('one ', request, ' coming right down'); ! 58: case request of ! 59: overflow: genoverflow; ! 60: underflow: genunderflow; ! 61: divideby0: gendivideby0; ! 62: domain: gendomain; ! 63: end; ! 64: end else begin ! 65: {default:} ! 66: writeln('oh, never mind'); ! 67: end; ! 68: end. ! 69:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.