! fmax(x,y) cases ! First some easy integer cases. 3> ALL 1 1 OK 1 3> ALL 1 2 OK 2 3> ALL 2 1 OK 2 3> ALL 2 2 OK 2 3> ALL 2 -2 OK 2 3> ALL 5 -5 OK 5 3> ALL 1 7 OK 7 3> ALL 5 -1 OK 5 3> ALL 2 -5 OK 2 3> ALL 5 5 OK 5 3> ALL 5 -0 OK 5 3> ALL 5 +0 OK 5 ! Infinity vs Infinity. 3> ALL H H OK H always equal 3> ALL -H -H OK -H always equal 3> ALL H -H OK H 3> ALL -H H OK H ! Infinity vs huge. 3> ALL H Hm1 OK H 3> ALL H -Hm1 OK H 3> ALL -H Hm1 OK Hm1 3> ALL -H -Hm1 OK -Hm1 3> ALL H Hd1 OK H 3> ALL H -Hd1 OK H 3> ALL -H Hd1 OK Hd1 3> ALL -H -Hd1 OK -Hd1 3> ALL Hm1 H OK H 3> ALL Hm1 -H OK Hm1 3> ALL -Hm1 H OK H 3> ALL -Hm1 -H OK -Hm1 ! Infinity vs 0. 3> ALL H 0 OK H 3> ALL H -0 OK H 3> ALL -H 0 OK 0 3> ALL -H -0 OK -0 3> ALL 0 H OK H 3> ALL -0 H OK H 3> ALL 0 -H OK 0 3> ALL -0 -H OK -0 ! Infinity vs denormalized. 3> ALL H Ed1 OK H 3> ALL -H Ed1 OK Ed1 3> ALL H -Ed1 OK H 3> ALL -H -Ed1 OK -Ed1 3> ALL H 0i1 OK H 3> ALL -H 0i1 OK 0i1 3> ALL H -0i1 OK H 3> ALL -H -0i1 OK -0i1 3> ALL Ed1 H OK H 3> ALL Ed1 -H OK Ed1 3> ALL -Ed1 H OK H 3> ALL -Ed1 -H OK -Ed1 ! Zero vs finite -- watch that sign of 0 is meaningless. 3> ALL 0 Hm1 OK Hm1 3> ALL -0 Hm1 OK Hm1 3> ALL -Hm1 0 OK 0 3> ALL -Hm1 -0 OK -0 3> ALL 1 -0 OK 1 3> ALL -1 -0 OK -0 3> ALL 0 1 OK 1 3> ALL -0 -1 OK -0 ! Zero vs denormalized. 3> ALL 0 Ed1 OK Ed1 3> ALL -0 Ed1 OK Ed1 3> ALL 0 -Ed1 OK 0 3> ALL -0 -Ed1 OK -0 3> ALL 0 0i1 OK 0i1 3> ALL -0 0i1 OK 0i1 3> ALL 0 -0i1 OK 0 3> ALL -0 -0i1 OK -0 3> ALL Ed1 0 OK Ed1 3> ALL Ed1 -0 OK Ed1 3> ALL -Ed1 0 OK 0 3> ALL -Ed1 -0 OK -0 ! Zero vs tiny -- just in case. 3> ALL -0 -E OK -0 3> ALL E 0 OK E 3> ALL 0 -E OK 0 3> ALL -E 0 OK 0 ! Zero vs Zero --- implementation-dependent. 3> ALL 0 -0 OK 0 3> ALL -0 0 OK -0 3> ALL 0 0 OK 0 3> ALL -0 -0 OK -0 ! Big cancellations. 3> ALL Hm1 Hm1 OK Hm1 3> ALL -Hm1 -Hm1 OK -Hm1 3> ALL Hm1d2 Hm1d2 OK Hm1d2 3> ALL -Hm1d2 -Hm1d2 OK -Hm1d2 3> ALL Hd1 Hd1 OK Hd1 3> ALL -Hd1 -Hd1 OK -Hd1 ! Medium cancellations. 3> ALL 1 1 OK 1 3> ALL 1m1 1m1 OK 1m1 3> ALL 3 3 OK 3 3> ALL E E OK E 3> ALL Hm2 Hm2 OK Hm2 ! Tiny cancellations -- might have underflowed. 3> ALL Ed1 Ed1 OK Ed1 3> ALL -Ed1 -Ed1 OK -Ed1 3> ALL 0i4 0i4 OK 0i4 3> ALL -0i4 -0i4 OK -0i4 3> ALL 0i1 0i1 OK 0i1 3> ALL -0i1 -0i1 OK -0i1 ! Doublings. 3> ALL Hm1 -Hm1 OK Hm1 3> ALL -Hm1d2 Hm1d2 OK Hm1d2 3> ALL 1 -1 OK 1 3> ALL -3 3 OK 3 3> ALL E -E OK E 3> ALL -E E OK E 3> ALL Ed4 -Ed4 OK Ed4 3> ALL -Ed1 Ed1 OK Ed1 3> ALL 0i1 -0i1 OK 0i1 3> ALL -0i1 0i1 OK 0i1 ! Cancellation with diff in LSB ! Difference is in last place of larger number. ! Medium numbers... 3> ALL 1i1 1 OK 1i1 3> ALL -1i1 -1 OK -1 3> ALL 1i1 1i2 OK 1i2 3> ALL -1i1 -1i2 OK -1i1 3> ALL 2 2i1 OK 2i1 3> ALL -2 -2i1 OK -2 3> ALL 2i4 2i3 OK 2i4 3> ALL -2i4 -2i3 OK -2i3 3> ALL 4d1 4d2 OK 4d1 3> ALL -4d1 -4d2 OK -4d2 3> ALL 2d4 2d3 OK 2d3 3> ALL -2d4 -2d3 OK -2d4 ! Huge numbers... 3> ALL Hm1i1 Hm1 OK Hm1i1 3> ALL -Hm1i1 -Hm1 OK -Hm1 3> ALL Hm1i1 Hm1i2 OK Hm1i2 3> ALL -Hm1i1 -Hm1i2 OK -Hm1i1 3> ALL Hm2 Hm2i1 OK Hm2i1 3> ALL -Hm2 -Hm2i1 OK -Hm2 3> ALL Hm2i4 Hm2i3 OK Hm2i4 3> ALL -Hm2i4 -Hm2i3 OK -Hm2i3 3> ALL Hm2d1 Hm2d2 OK Hm2d1 3> ALL -Hm2d1 -Hm2d2 OK -Hm2d2 3> ALL -Hd2 -Hd1 OK -Hd2 3> ALL Hd2 Hd1 OK Hd1 ! Tiny numbers... 3> ALL -Ei1 -E OK -E 3> ALL Ei1 E OK Ei1 3> ALL -Ed1 -E OK -Ed1 3> ALL Ed1 E OK E 3> ALL Ei1 Ei2 OK Ei2 3> ALL -Ei1 -Ei2 OK -Ei1 3> ALL Ed1 Ed2 OK Ed1 3> ALL -Ed1 -Ed2 OK -Ed2 3> ALL Ed3 Ed2 OK Ed2 3> ALL -Ed3 -Ed2 OK -Ed3 3> ALL 0i2 0i1 OK 0i2 3> ALL -0i2 -0i1 OK -0i1 3> ALL 0i3 0i2 OK 0i3 3> ALL -0i3 -0i2 OK -0i2 ! Normalize from round bit -- set up tests so that operands have ! exponents differing by 1 unit. ! Medium numbers... 3> ALL 2 2d1 OK 2 3> ALL -2 -2d1 OK -2d1 3> ALL -2d1 -2 OK -2d1 3> ALL 2d1 2 OK 2 3> ALL 4i1 4d1 OK 4i1 3> ALL -4i1 -4d1 OK -4d1 3> ALL 4d1 4i2 OK 4i2 3> ALL -4d1 -4i2 OK -4d1 3> ALL 2i1 1i1 OK 2i1 3> ALL -2i1 -1i1 OK -1i1 3> ALL 2i2 1i1 OK 2i2 3> ALL -2i2 -1i1 OK -1i1 3> ALL 2i2 1i3 OK 2i2 3> ALL -2i2 -1i3 OK -1i3 ! Huge numbers... 3> ALL Hm2 Hm2d1 OK Hm2 3> ALL -Hm2 -Hm2d1 OK -Hm2d1 3> ALL -Hm1d1 -Hm1 OK -Hm1d1 3> ALL Hm1d1 Hm1 OK Hm1 3> ALL Hm4i1 Hm4d1 OK Hm4i1 3> ALL -Hm4i1 -Hm4d1 OK -Hm4d1 3> ALL Hm2d1 Hm2i2 OK Hm2i2 3> ALL -Hm2d1 -Hm2i2 OK -Hm2d1 3> ALL Hm2i1 Hm1i1 OK Hm1i1 3> ALL -Hm2i1 -Hm1i1 OK -Hm2i1 3> ALL Hm1i2 Hm2i1 OK Hm1i2 3> ALL -Hm1i2 -Hm2i1 OK -Hm2i1 3> ALL Hm2i2 Hm3i3 OK Hm2i2 3> ALL -Hm2i2 -Hm3i3 OK -Hm3i3 ! Tiny numbers... 3> ALL Ep1 Ep1d1 OK Ep1 3> ALL -Ep1 -Ep1d1 OK -Ep1d1 3> ALL -Ep1d1 -Ep1 OK -Ep1d1 3> ALL Ep1d1 Ep1 OK Ep1 3> ALL Ep1i1 Ep1d1 OK Ep1i1 3> ALL -Ep1i1 -Ep1d1 OK -Ep1d1 3> ALL Ep2 Ep2d1 OK Ep2 3> ALL -Ep2 -Ep2d1 OK -Ep2d1 3> ALL -Ep2d1 -Ep2 OK -Ep2d1 3> ALL Ep2d1 Ep2 OK Ep2 3> ALL Ep2i1 Ep2d1 OK Ep2i1 3> ALL -Ep2i1 -Ep2d1 OK -Ep2d1 3> ALL Ep1d1 Ep1i2 OK Ep1i2 3> ALL -Ep1d1 -Ep1i2 OK -Ep1d1 3> ALL Ep1d1 Ep1i4 OK Ep1i4 3> ALL -Ep1d1 -Ep1i4 OK -Ep1d1 3> ALL Ep1i1 Ei1 OK Ep1i1 3> ALL -Ep1i1 -Ei1 OK -Ei1 3> ALL Ep1i2 Ei1 OK Ep1i2 3> ALL -Ep1i2 -Ei1 OK -Ei1 3> ALL Ep2i2 Ep1i3 OK Ep2i2 3> ALL -Ep2i2 -Ep1i3 OK -Ep1i3 ! ! Add magnitude ! cases where one operand is off in sticky -- rounding ! perhaps to an overflow. ! Huge vs medium 3> ALL Hm1 1 OK Hm1 3> ALL -Hm1 -1 OK -1 3> ALL Hm1d1 -1 OK Hm1d1 3> ALL Hm1d1 1 OK Hm1d1 3> ALL -Hm1d1 1 OK 1 3> ALL -Hm1d1 -1 OK -1 3> ALL Hd1 1 OK Hd1 3> ALL Hd1 -1 OK Hd1 3> ALL -Hd1 1 OK 1 3> ALL -Hd1 -1 OK -1 3> ALL Hd2 -1 OK Hd2 3> ALL Hd2 1 OK Hd2 3> ALL -Hd2 1 OK 1 3> ALL -Hd2 -1 OK -1 ! Huge vs tiny. 3> ALL 0i1 Hm1 OK Hm1 3> ALL 0i1 -Hm1 OK 0i1 3> ALL -0i1 Hm1 OK Hm1 3> ALL -0i1 -Hm1 OK -0i1 3> ALL 0i1 Hm1d1 OK Hm1d1 3> ALL 0i1 -Hm1d1 OK 0i1 3> ALL -0i1 Hm1d1 OK Hm1d1 3> ALL -0i1 -Hm1d1 OK -0i1 3> ALL 0i1 Hd1 OK Hd1 3> ALL 0i1 -Hd1 OK 0i1 3> ALL -0i1 Hd1 OK Hd1 3> ALL -0i1 -Hd1 OK -0i1 3> ALL 0i1 Hd2 OK Hd2 3> ALL 0i1 -Hd2 OK 0i1 3> ALL -0i1 Hd2 OK Hd2 3> ALL -0i1 -Hd2 OK -0i1 ! Medium vs tiny. 3> ALL 0i1 1 OK 1 3> ALL 0i1 -1 OK 0i1 3> ALL -0i1 1 OK 1 3> ALL -0i1 -1 OK -0i1 3> ALL 0i1 1d1 OK 1d1 3> ALL 0i1 -1d1 OK 0i1 3> ALL -0i1 1d1 OK 1d1 3> ALL -0i1 -1d1 OK -0i1 3> ALL 0i1 2d1 OK 2d1 3> ALL 0i1 -2d1 OK 0i1 3> ALL -0i1 2d1 OK 2d1 3> ALL -0i1 -2d1 OK -0i1 3> ALL 0i1 2d2 OK 2d2 3> ALL 0i1 -2d2 OK 0i1 3> ALL -0i1 2d2 OK 2d2 3> ALL -0i1 -2d2 OK -0i1 ! ! Magnitude subtract when an operand is in the sticky bit. ! The interesting cases will arise when directed rounding ! forces a nonzero cancellation. ! Huge and medium. 3> ALL Hm1 1 OK Hm1 3> ALL Hm1 -1 OK Hm1 3> ALL -Hm1 1 OK 1 3> ALL -Hm1 -1 OK -1 3> ALL Hm1d1 1 OK Hm1d1 3> ALL Hm1d1 -1 OK Hm1d1 3> ALL -Hm1d1 1 OK 1 3> ALL -Hm1d1 -1 OK -1 3> ALL Hd1 1 OK Hd1 3> ALL Hd1 -1 OK Hd1 3> ALL -Hd1 1 OK 1 3> ALL -Hd1 -1 OK -1 3> ALL Hd2 1 OK Hd2 3> ALL Hd2 -1 OK Hd2 3> ALL -Hd2 1 OK 1 3> ALL -Hd2 -1 OK -1 ! Huge and tiny. 3> ALL Hd1 0i1 OK Hd1 3> ALL Hd1 -0i1 OK Hd1 3> ALL -Hd1 0i1 OK 0i1 3> ALL -Hd1 -0i1 OK -0i1 3> ALL 0i3 Hm1 OK Hm1 3> ALL -0i3 Hm1 OK Hm1 3> ALL 0i3 -Hm1 OK 0i3 3> ALL -0i3 -Hm1 OK -0i3 ! Medium and tiny. 3> ALL 1d1 0i1 OK 1d1 3> ALL 1d1 -0i1 OK 1d1 3> ALL 2d1 0i1 OK 2d1 3> ALL -2d1 0i1 OK 0i1 3> ALL 0i3 3 OK 3 3> ALL -0i3 3 OK 3 3> ALL 0i3 5 OK 5 3> ALL 0i3 -5 OK 0i3 ! ! Add magnitude with difference in LSB so, except for denorms, ! round bit is crucial. Half-way cases arise. ! Medium cases. 3> ALL 1i1 1 OK 1i1 3> ALL 1i1 -1 OK 1i1 3> ALL -1i1 1 OK 1 3> ALL -1i1 -1 OK -1 3> ALL -2 2i1 OK 2i1 3> ALL -2 -2i1 OK -2 3> ALL 2 -2i1 OK 2 3> ALL 2 2i1 OK 2i1 3> ALL 1 1i3 OK 1i3 3> ALL 1 -1i3 OK 1 3> ALL -1 1i3 OK 1i3 3> ALL -1 -1i3 OK -1 3> ALL -2i1 -2i2 OK -2i1 3> ALL -2i1 2i2 OK 2i2 3> ALL 2i1 -2i2 OK 2i1 3> ALL 2i1 2i2 OK 2i2 ! Huge cases. 3> ALL Hd2 Hd1 OK Hd1 3> ALL Hd2 -Hd1 OK Hd2 3> ALL -Hd2 Hd1 OK Hd1 3> ALL -Hd2 -Hd1 OK -Hd2 3> ALL Hm1d1 Hm1 OK Hm1 3> ALL Hm1d1 -Hm1 OK Hm1d1 3> ALL -Hm1d1 Hm1 OK Hm1 3> ALL -Hm1d1 -Hm1 OK -Hm1d1 3> ALL Hm1i1 Hm1 OK Hm1i1 3> ALL Hm1i1 -Hm1 OK Hm1i1 3> ALL -Hm1i1 Hm1 OK Hm1 3> ALL -Hm1i1 -Hm1 OK -Hm1 3> ALL Hm2i1 Hm2 OK Hm2i1 3> ALL Hm2i1 -Hm2 OK Hm2i1 3> ALL -Hm2i1 Hm2 OK Hm2 3> ALL -Hm2i1 -Hm2 OK -Hm2 3> ALL Hm1d2 Hm1d1 OK Hm1d1 3> ALL Hm1d2 -Hm1d1 OK Hm1d2 3> ALL -Hm1d2 Hm1d1 OK Hm1d1 3> ALL -Hm1d2 -Hm1d1 OK -Hm1d2 ! NaN operands. Signaling NaN cases commented out . 3> ALL Q 0 OK 0 3> ALL Q -0 OK -0 3> ALL 0 Q OK 0 3> ALL -0 Q OK -0 3> ALL Q 1 OK 1 3> ALL Q -1 OK -1 3> ALL 1 Q OK 1 3> ALL -1 Q OK -1 3> ALL Ed1 Q OK Ed1 3> ALL -Ed1 Q OK -Ed1 3> ALL Q Ed1 OK Ed1 3> ALL Q -Ed1 OK -Ed1 3> ALL Q 0i1 OK 0i1 3> ALL Q -0i1 OK -0i1 3> ALL 0i1 Q OK 0i1 3> ALL -0i1 Q OK -0i1 3> ALL Q Hd1 OK Hd1 3> ALL Q -Hd1 OK -Hd1 3> ALL Hd1 Q OK Hd1 3> ALL -Hd1 Q OK -Hd1 3> ALL Q H OK H 3> ALL Q -H OK -H 3> ALL H Q OK H 3> ALL -H Q OK -H 3> ALL Q Q OK Q !3> ALL S 0 i ? !3> ALL S -0 i ? !3> ALL 0 S i ? !3> ALL -0 S i ? !3> ALL S 1 i ? !3> ALL S -1 i ? !3> ALL 1 S i ? !3> ALL -1 S i ? !3> ALL Ed1 S i ? !3> ALL -Ed1 S i ? !3> ALL S Ed1 i ? !3> ALL S -Ed1 i ? !3> ALL S 0i1 i ? !3> ALL S -0i1 i ? !3> ALL 0i1 S i ? !3> ALL -0i1 S i ? !3> ALL S Hd1 i ? !3> ALL S -Hd1 i ? !3> ALL Hd1 S i ? !3> ALL -Hd1 S i ? !3> ALL S H i ? !3> ALL S -H i ? !3> ALL H S i ? !3> ALL -H S i ? !3> ALL Q S i ? !3> ALL S Q i ? !3> ALL S S i ?