code 35145;
real procedure AIRYZEROS(N,D,ZAI,VAI);
value N,D; integer N,D; array ZAI,VAI;
begin boolean A, FOUND; integer I;
    real C,E,R,ZAJ,ZAK,VAJ,DAJ,KAJ,ZZ;

    A :=  D = 0 or D = 2;
    R := if D = 0 or D = 3 then -1.1780 97245 09617
                               else -3.5342 91735 28852;
    comment  R := "IF" D = 0 "OR" D = 3 "THEN" -3 * PI / 8
                                          "ELSE" -9 * PI / 8;
    AIRY(0,ZAJ,VAJ,DAJ,KAJ,ZZ,true );
    for I := 1 step 1 until N do 
    begin R := R + 4.7123 88980 38469; comment R := R + 3 * PI / 2;
        ZZ := R * R;
        ZAJ := if I = 1 and D = 1 then -1.01879 297 else 
               if I = 1 and D = 2 then -1.17371 322 else 
               R ** 0.66666 66666 66667 * ( if A then 
               - ( 1 + ( 5/48 - ( 5/36 - ( 77125/82944 - (
               1080 56875 / 69 67296 - (16 23755 96875 / 3344 30208)
               /ZZ)/ZZ)/ZZ)/ZZ)/ZZ)
                                                   else 
               - ( 1 - ( 7/48 - ( 35/288 - ( 1 81223 / 2 07360 - (
               186 83371 / 12 44160 - ( 9 11458 84361 / 1911 02976 )
               /ZZ)/ZZ)/ZZ)/ZZ)/ZZ));
        if  D <= 1 then AIRY(ZAJ,VAJ,DAJ,C,E,ZZ,false )
                     else AIRY(ZAJ,C,E,VAJ,DAJ,ZZ,false );
        FOUND := ABS( if A then VAJ else DAJ ) < "-12;
        for C := C while not FOUND do 
        begin if A then 
            begin KAJ := VAJ / DAJ;
                ZAK := ZAJ - KAJ * (1 + ZAJ * KAJ * KAJ)
            end else 
            begin KAJ := DAJ / (ZAJ * VAJ);
                ZAK := ZAJ - KAJ * (1 + KAJ * (KAJ * ZAJ + 1 / ZAJ))
            end;
            if  D <= 1 then AIRY(ZAK,VAJ,DAJ,C,E,ZZ,false )
                         else AIRY(ZAK,C,E,VAJ,DAJ,ZZ,false );
            FOUND := ABS(ZAK - ZAJ) < "-14 * ABS(ZAK) or 
                     ABS(if A then VAJ else DAJ) < "-12;
            ZAJ := ZAK
        end;
        VAI[I] := if A then DAJ else VAJ;
        ZAI[I] := ZAJ;
    end;
    AIRYZEROS := ZAI[N];
end AIRYZEROS;
        eop