Annotation of 43BSDReno/pgrm/pascal/pdx/test/overflow.p, revision 1.1.1.1

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:            

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.