1 !! This file contains precision and range independent test vectors for
2 !! the operation divide (/). The first character in each
3 !! test vector refers to the origin of the test vector
5 !! 2: Jerome Coonen Version <2>
6 !! 3: Jerome Coonen Version <3>
8 !! author = {Coonen, J.T.},
9 !! title = {Contributions to a proposed standard for binary
10 !! floating-point arithmetic},
11 !! school = {University of California, Berkeley},
14 !! H: precision independent encoding of UCB/<H>ough test vector
16 !! author = {David G. Hough and others},
17 !! title = {{UCBTEST}, a suite of programs for testing certain
18 !! difficult cases of {IEEE} 754 floating-point arithmetic},
20 !! note = {Restricted public domain software from
21 !! http://netlib.bell-labs.com/netlib/fp/index.html}}
23 !! A: Verdonk-Cuyt-Verschaeren (University of <A>ntwerp)
25 !! author = {Verdonk, B. and Cuyt, A. and Verschaeren, D.},
26 !! title = {A precision- and range-independent tool for testing
27 !! floating-point arithmetic {I}: basic operations,
28 !! square root and remainder},
29 !! journal = {ACM TOMS},
34 !! note = {Under revision}}
36 !! This file is part of the tool IeeeCC754 or IEEE 754 Compliance Checker.
37 !! It is a precision and range independent tool to test whether
38 !! an implementation of floating-point arithmetic (in hardware or
39 !! software) is compliant with the principles of the IEEE 754-854
40 !! floating-point standards. You can find out more about the testing
41 !! tool IeeeCC754 and the syntax and semantics of the test vectors
43 !! http://win-www.uia.ac.be/u/cant/ieeecc754.html
49 !! Brigitte.Verdonk@ua.ac.be
50 !! Department of Mathematics and Computer Science
51 !! University of Antwerp (UIA)
52 !! Universiteitsplein 1
53 !! B2610 Antwerp, BELGIUM
55 !! Medium size numbers
56 2/ ALL 1p15 1p5 OK 1p10
57 A/ ALL -1p15 -1p5 OK 1p10
58 2/ ALL 1p15 -1p5 OK -1p10
59 2/ ALL -1p15 1p5 OK -1p10
60 2/ ALL 1p120 1p20 OK 1p100
61 A/ ALL -1p120 -1p20 OK 1p100
62 2/ ALL -1p120 1p20 OK -1p100
63 2/ ALL 1p120 -1p20 OK -1p100
64 2/ ALL 1p63 1p23 OK 1p40
65 A/ ALL -1p63 -1p23 OK 1p40
66 A/ ALL -1p63 1p23 OK -1p40
67 A/ ALL 1p63 -1p23 OK -1p40
68 2/ ALL 1p47 1p13 OK 1p34
69 A/ ALL -1p47 -1p13 OK 1p34
70 A/ ALL -1p47 1p13 OK -1p34
71 A/ ALL 1p47 -1p13 OK -1p34
77 2/ ALL 32760 10 OK 3276
78 2/ ALL 10000 10 OK 1000
79 2/ ALL 10000 100 OK 100
80 2/ ALL 10000 1000 OK 10
100 2/ ALL -Hm1d1 2 OK -Hm2d1
101 2/ ALL Hm1d3 -2 OK -Hm2d3
102 2/ ALL Hd1 -2 OK -Hm1d1
108 2/ ALL Tp1i3 -2 OK -Ti3
109 2/ ALL Tp1i1 -2 OK -Ti1
110 2/ ALL Tp1d2 2 OK Td1
111 A/ ALL 0i(1)1 2 OK 0i(2)1
112 A/ ALL -0i(1)1 -2 OK 0i(2)1
113 A/ ALL -0i(1)1 2 OK -0i(2)1
114 A/ ALL 0i(1)1 -2 OK -0i(2)1
116 A/ ALL -0i2 -2 OK 0i1
117 A/ ALL -0i2 2 OK -0i1
118 A/ ALL 0i2 -2 OK -0i1
119 2/ ALL Hd1 Hm1d1 OK 2
120 2/ ALL -Hm1i1 Hm2i1 OK -2
121 2/ ALL Hm1i3 -Hm2i3 OK -2
123 2/ ALL -Tp1i1 Ti1 OK -2
124 2/ ALL Tp1i1 Ti1 OK 2
125 2/ ALL Tp1i3 -Ti3 OK -2
126 2/ ALL -Tp1i5 Ti5 OK -2
127 A/ ALL 0i(1)1 0i(2)1 OK 2
128 A/ ALL -0i(1)1 -0i(2)1 OK 2
129 A/ ALL -0i(1)1 0i(2)1 OK -2
130 A/ ALL 0i(1)1 -0i(2)1 OK -2
132 A/ ALL -0i2 -0i1 OK 2
133 A/ ALL 0i2 -0i1 OK -2
134 A/ ALL -0i2 0i1 OK -2
140 2/ ALL Td1 1m1 OK Tp1d2
141 A/ ALL -Td1 -1m1 OK Tp1d2
142 A/ ALL -Td1 1m1 OK -Tp1d2
143 A/ ALL Td1 -1m1 OK -Tp1d2
144 2/ ALL 0i1 1m1 OK 0i2
145 A/ ALL -0i1 -1m1 OK 0i2
146 2/ ALL -0i1 1m1 OK -0i2
147 A/ ALL 0i1 -1m1 OK -0i2
152 A/ ALL Td1 Tp1d2 OK 1m1
153 A/ ALL -Td1 -Tp1d2 OK 1m1
154 A/ ALL -Td1 Tp1d2 OK -1m1
155 A/ ALL Td1 -Tp1d2 OK -1m1
156 2/ ALL 0i1 0i2 OK 1m1
157 A/ ALL -0i1 0i2 OK -1m1
158 A/ ALL -0i1 -0i2 OK 1m1
159 A/ ALL 0i1 -0i2 OK -1m1
162 A/ ALL -3 -1m9 OK 3p9
163 A/ ALL -3 1m9 OK -3p9
164 A/ ALL 3 -1m9 OK -3p9
165 2/ ALL Td1 1m9 OK Tp9d2
166 A/ ALL -Td1 -1m9 OK Tp9d2
167 A/ ALL -Td1 1m9 OK -Tp9d2
168 A/ ALL Td1 -1m9 OK -Tp9d2
169 2/ ALL 0i1 1m3 OK 0i8
170 A/ ALL -0i1 -1m3 OK 0i8
171 A/ ALL -0i1 1m3 OK -0i8
172 A/ ALL 0i1 -1m3 OK -0i8
174 A/ ALL -3 3p9 OK -1m9
175 A/ ALL -3 -3p9 OK 1m9
176 A/ ALL 3 -3p9 OK -1m9
177 A/ ALL Td1 Tp9d2 OK 1m9
178 A/ ALL -Td1 Tp9d2 OK -1m9
179 A/ ALL -Td1 -Tp9d2 OK 1m9
180 A/ ALL Td1 -Tp9d2 OK -1m9
181 A/ ALL 0i1 0i8 OK 1m3
182 A/ ALL -0i1 0i8 OK -1m3
183 A/ ALL -0i1 -0i8 OK 1m3
184 A/ ALL 0i1 -0i8 OK -1m3
195 2/ ALL Hd3 4 OK Hm2d3
196 2/ ALL Hd3 -4 OK -Hm2d3
197 2/ ALL -Hd3 4 OK -Hm2d3
198 2/ ALL -Hd3 -4 OK Hm2d3
199 A/ ALL 0i(1)1 4 OK 0i(3)1
200 A/ ALL -0i(1)1 -4 OK 0i(3)1
201 A/ ALL -0i(1)1 4 OK -0i(3)1
202 A/ ALL 0i(1)1 -4 OK -0i(3)1
204 A/ ALL -0i4 -4 OK 0i1
205 A/ ALL -0i4 4 OK -0i1
206 A/ ALL 0i4 -4 OK -0i1
207 2/ ALL Hd1 Hm2d1 OK 4
208 2/ ALL -Hd1 Hm2d1 OK -4
209 2/ ALL Hd1 -Hm2d1 OK -4
210 2/ ALL -Hd1 -Hm2d1 OK 4
211 A/ ALL 0i(1)1 0i(3)1 OK 4
212 A/ ALL -0i(1)1 -0i(3)1 OK 4
213 A/ ALL -0i(1)1 0i(3)1 OK -4
214 A/ ALL 0i(1)1 -0i(3)1 OK -4
216 A/ ALL -0i4 -0i1 OK 4
217 A/ ALL 0i4 -0i1 OK -4
218 A/ ALL -0i4 0i1 OK -4
234 A/ ALL -0i1 -0i1 OK 1
235 A/ ALL 0i1 -0i1 OK -1
236 A/ ALL -0i1 0i1 OK -1
238 2/ ALL 0i9 -9 OK -0i1
240 !! special representations
246 !! zero versus denormal
247 ! 0 / denormalized -> 0.
256 ! Denormalized * 0 -> Inf, DivBy0
265 !! zero versus normal
266 ! 0 / small_integer -> 0.
275 ! Small_int / 0 -> Inf with DivBy0.
290 2/ ALL -0 Hm2d1 OK -0
291 2/ ALL 0 -Hm2d1 OK -0
292 2/ ALL -0 -Hm1d1 OK 0
293 ! Huge / 0 -> Inf with DivBy0.
310 2/ ALL -0 -Tp1d1 OK 0
311 ! Tiny / 0 -> Inf with DivBy0.
320 !! zero versus infinity
321 ! Inf / 0 --> Inf with no problem.
326 ! 0 / Inf --> 0 with no problem.
340 !! infinity versus infinity
345 !! infinity versus denormal
346 ! Inf / denormalized -> Inf.
364 !! infinity versus normal
365 ! Inf / small_integer -> Inf.
374 ! Small_int / Inf -> 0.
389 2/ ALL -Hm2d1 H OK -0
398 2/ ALL H -Hm2d1 OK -H
409 2/ ALL -H -Tp1d1 OK H
418 2/ ALL -Tp1d1 -H OK 0
419 !! infinity versus NaN
433 !! NaN versus denormal
469 !! invalid and divide by zero, see special representations
475 2/ 0< -Hm1 -1m1 xo Hd1
478 2/ 0> Hm1 -1m1 xo -Hd1
479 2/ 0> -Hm1 1m1 xo -Hd1
488 !! Result = Max. normal, round or sticky bit <> 0
489 !! This combination is not possible
490 !! inexact, underflow
492 !! Z = 0.0...0, round bit = 0
510 ! Tiny / huge -> underflow.
513 2/ =<0 -0i1 -Hd1 xu 0
514 2/ > -0i1 -Hd1 xu 0i1
515 2/ =0> 0i1 -Hd1 xu -0
516 2/ < 0i1 -Hd1 xu -0i1
517 2/ =0> -0i1 Hd1 xu -0
518 2/ < -0i1 Hd1 xu -0i1
519 !! X - Y = -B-t+1, round bit = 1, sticky bit = 1
521 A/ => Tp1d1 1pt xu 0i1
522 A/ 0< -Tp1d1 -1pt xu 0
523 A/ => -Tp1d1 -1pt xu 0i1
524 A/ 0> -Tp1d1 1pt xu -0
525 A/ =< -Tp1d1 1pt xu -0i1
526 A/ 0> Tp1d1 -1pt xu -0
527 A/ =< Tp1d1 -1pt xu -0i1
530 A/ => Td1 1ptm1 xu 0i1
531 A/ 0< -Td1 -1ptm1 xu 0
532 A/ => -Td1 -1ptm1 xu 0i1
533 A/ 0> -Td1 1ptm1 xu -0
534 A/ =< -Td1 1ptm1 xu -0i1
535 A/ 0> Td1 -1ptm1 xu -0
536 A/ =< Td1 -1ptm1 xu -0i1
537 !! X - Y = -B-t+1, round bit = 1, sticky bits = 0
541 A/ => -3mB -1pt xu 0i1
543 A/ =< -3mB 1pt xu -0i1
545 A/ =< 3mB -1pt xu -0i1
555 !! X - Y = -B-t+1, round bit = 1, sticky bits = 1
557 A/ => 5mBm1 1pt xu 0i1
558 A/ 0< -5mBm1 -1pt xu 0
559 A/ => -5mBm1 -1pt xu 0i1
560 A/ 0> -5mBm1 1pt xu -0
561 A/ =< -5mBm1 1pt xu -0i1
562 A/ 0> 5mBm1 -1pt xu -0
563 A/ =< 5mBm1 -1pt xu -0i1
573 !! X - Y = -B-t+1, round bit = 1, sticky bit = 0, round to even
591 !! X - Y = -B-t+2, round bit = 1, sticky bit = 0, round to even
592 A/ 0< Tp1i(1)1 1pt xu 0i1
593 A/ => Tp1i(1)1 1pt xu 0i2
594 A/ 0< -Tp1i(1)1 -1pt xu 0i1
595 A/ => -Tp1i(1)1 -1pt xu 0i2
596 A/ 0> -Tp1i(1)1 1pt xu -0i1
597 A/ =< -Tp1i(1)1 1pt xu -0i2
598 A/ 0> Tp1i(1)1 -1pt xu -0i1
599 A/ =< Tp1i(1)1 -1pt xu -0i2
609 !! exp. Z = -B + denormalization loss => inexactness
610 A/ =0< Tp1d3 2 xu Td2
612 A/ =0< -Tp1d3 -2 xu Td2
613 A/ > -Tp1d3 -2 xu Td1
614 A/ =0> -Tp1d3 2 xu -Td2
615 A/ < -Tp1d3 2 xu -Td1
616 A/ =0> Tp1d3 -2 xu -Td2
617 A/ < Tp1d3 -2 xu -Td1
618 A/ 0<= Ti(3)7i3 1p2i(1)1 xu 0i(4)5
619 A/ > Ti(3)7i3 1p2i(1)1 xu 0i(4)5i1
620 A/ 0< Ti(3)7i3 1pti(1)1 xu 0
621 A/ >= Ti(3)7i3 1pti(1)1 xu 0i1
623 A/ 0< Td1 2 xu 0i(1)1d1
624 A/ => Td1 2 xu 0i(1)1
625 A/ 0< -Td1 -2 xu 0i(1)1d1
626 A/ => -Td1 -2 xu 0i(1)1
627 A/ 0> -Td1 2 xu -0i(1)1d1
628 A/ =< -Td1 2 xu -0i(1)1
629 A/ 0> Td1 -2 xu -0i(1)1d1
630 A/ =< Td1 -2 xu -0i(1)1
631 !! exp. Z = -B + inexactness, no denormalization loss
634 A/ =0< -T -1i1 xv Td1
636 2/ =0> -T 1i1 xv -Td1
638 A/ =0> T -1i1 xv -Td1
640 2/ <=0 Ti1 1i2 xv Td1
642 2/ <=0 Ti2 1i6 xv Td4
644 2/ =0< Td1 1i1 xv Td2
646 A/ =0< -Td1 -1i1 xv Td2
647 A/ > -Td1 -1i1 xu Td1
648 A/ =0> -Td1 1i1 xv -Td2
649 A/ < -Td1 1i1 xu -Td1
650 A/ =0> Td1 -1i1 xv -Td2
651 A/ < Td1 -1i1 xu -Td1
654 2/ <= -Td8 1d2 xv -Td7
655 2/ <=0 Td1 1i2 xv Td3
657 !! exp. Z = -B + tininess after rounding
658 A/ > Ti(1)1d1 3m1 xu T
659 A/ = Ti(1)1d1 3m1 xu Td1
660 A/ 0< Ti(1)1d1 3m1 xv Td1
661 A/ < -Ti(1)1d1 3m1 xu -T
662 A/ = -Ti(1)1d1 3m1 xu -Td1
663 A/ 0> -Ti(1)1d1 3m1 xv -Td1
667 A/ >0 -1d1 Hm2 xu -Td1
668 !! tininess before and after rounding
669 !! as though the exponent range were unbounded
672 A/ 0< -Tp1d1 -2 xu Td1
674 A/ 0> -Tp1d1 2 xu -Td1
676 2/ 0> Tp1d1 -2 xu -Td1
678 !! inexact, see rounding properties below
681 !! round bit = 0, sticky bit = 1 => inexact, round down
682 ! Tricky divides based on power series expansions
683 ! 1 / (1 + Nulp+) --> 1 - (2Nulp-) + tiny.
702 ! 1 / (1 - Nu-) --> 1 + (Q/2 u+) + tiny.
715 ! (1 + Mulp+) / (1 + Qulp+) -->
716 ! Case M < Q: (1 + 2Mulp-) * (1 - 2Qulp- + (2Qulp-)^2 - tiny) -->
717 ! 1 - 2(Q-M)ulp- + 4(QQ-MQ)(ulp-)^2 + tiny -->
718 ! 1 - 2(Q-M)ulp- + tiny.
744 ! (1 - Mulp-) / (1 - Qulp-) -->
745 ! Case M < Q: (1 - (M/2)ulp+) * (1 + (Q/2)ulp+ + ((Q/2)ulp+)^2 + tiny) -->
746 ! 1 + ((Q-M)/2)ulp+ + (QQ-MQ)/4(ulp+)^2 + tiny -->
747 ! 1 + (Q-M)/2ulp+ + tiny.
773 ! (1 + Mulp+) / (1 - Qulp-) -->
774 ! (1 + Mulp+) * (1 + (Q/2)ulp+ + ((Q/2)ulp+)^2 + tiny) -->
775 ! 1 + (M + Q/2)ulp+ + tiny.
800 ! (1 - Mulp-) / (1 + Qulp+) -->
801 ! (1 - Mulp-) * (1 - 2Qulp- + (2Qulp-)^2 - tiny) -->
802 ! 1 - (M + 2Q)ulp- + tiny.
847 ! A few tricky cases.
848 A/ =0< -1d4 -1i1 x 1d6
850 A/ =0> -1d4 1i1 x -1d6
852 A/ =0> 1d4 -1i1 x -1d6
854 !! 3ff7ffff ffffffff 3feffff fffffffe 3ff80000 00000000
855 H/ 0< 3m1d1 1d2 x 3m1
856 H/ => 3m1d1 1d2 x 3m1i1
857 A/ 0< -3m1d1 -1d2 x 3m1
858 A/ => -3m1d1 -1d2 x 3m1i1
859 A/ 0> -3m1d1 1d2 x -3m1
860 A/ =< -3m1d1 1d2 x -3m1i1
861 A/ 0> 3m1d1 -1d2 x -3m1
862 A/ =< 3m1d1 -1d2 x -3m1i1
864 A/ =0< 0i(1)1 Ti1 x 1m1d2
865 A/ > 0i(1)1 Ti1 x 1m1d1
866 A/ =0< -0i(1)1 -Ti1 x 1m1d2
867 A/ > -0i(1)1 -Ti1 x 1m1d1
868 A/ =0> -0i(1)1 Ti1 x -1m1d2
869 A/ < -0i(1)1 Ti1 x -1m1d1
870 A/ =0> 0i(1)1 -Ti1 x -1m1d2
871 A/ < 0i(1)1 -Ti1 x -1m1d1
872 !! round bit = 0, sticky bit = 10 => inexact, round down
873 !! This combination is not possible
874 !! round bit = 0, sticky bit = 1 => inexact, round down
884 A/ =0< 0i(2)3i1 Ti1 x 3m2
885 A/ > 0i(2)3i1 Ti1 x 3m2i1
886 A/ =0< -0i(2)3i1 -Ti1 x 3m2
887 A/ > -0i(2)3i1 -Ti1 x 3m2i1
888 A/ =0> 0i(2)3i1 -Ti1 x -3m2
889 A/ < 0i(2)3i1 -Ti1 x -3m2i1
890 A/ =0> -0i(2)3i1 Ti1 x -3m2
891 A/ < -0i(2)3i1 Ti1 x -3m2i1
892 !! round bit = 1, sticky bit = 0 => inexact, round up
893 !! This combination is not possible
894 !! round bit = 1, sticky bit = 1 => inexact, round up
895 ! 1 / (1 - Qu-) --> 1 + (Q/2 u+) + tiny.
908 ! 1 / (1 - Qu-) --> 1 + (Q/2 u+) + tiny.
917 ! (1 - Mulp-) / (1 - Qulp-) -->
918 ! Case M < Q: (1 - (M/2)ulp+) * (1 + (Q/2)ulp+ + ((Q/2)ulp+)^2 + tiny) -->
919 ! 1 + ((Q-M)/2)ulp+ + (QQ-MQ)/4(ulp+)^2 + tiny -->
920 ! 1 + (Q-M)/2ulp+ + tiny.
955 ! (1 + Mulp+) / (1 - Qulp-) -->
956 ! (1 + Mulp+) * (1 + (Q/2)ulp+ + ((Q/2)ulp+)^2 + tiny) -->
957 ! 1 + (M + Q/2)ulp+ + tiny.
996 A/ => 0i(1)1 Tp1d1 x 1m2i1
997 A/ 0< 0i(1)1 Tp1d1 x 1m2
998 A/ => -0i(1)1 -Tp1d1 x 1m2i1
999 A/ 0< -0i(1)1 -Tp1d1 x 1m2
1000 A/ =< -0i(1)1 Tp1d1 x -1m2i1
1001 A/ 0> -0i(1)1 Tp1d1 x -1m2
1002 A/ =< 0i(1)1 -Tp1d1 x -1m2i1
1003 A/ 0> 0i(1)1 -Tp1d1 x -1m2
1004 !! 3ff80000 00000001 3ff00000 00000001 3ff7ffff ffffffff
1005 H/ => 3m1i1 1i1 x 3m1
1006 H/ 0< 3m1i1 1i1 x 3m1d1
1007 A/ => -3m1i1 -1i1 x 3m1
1008 A/ 0< -3m1i1 -1i1 x 3m1d1
1009 A/ =< -3m1i1 1i1 x -3m1
1010 A/ 0> -3m1i1 1i1 x -3m1d1
1011 A/ =< 3m1i1 -1i1 x -3m1
1012 A/ 0> 3m1i1 -1i1 x -3m1d1
1013 !! round bit = 1, sticky bit = 1 => inexact, round up
1014 ! (1 + Mu+) / (1 + Qu+) -->
1015 ! Case M > Q: (1 + Mu+) * (1 - Qu+ + (Qu+)^2 - tiny) -->
1016 ! 1 + (M-Q)u+ - (MQ-QQ)(u+)^2 + tiny -->
1017 ! 1 + (M-Q)u+ - tiny.
1021 2/ => -1i2 -1i1 x 1i1
1023 2/ =< -1i2 1i1 x -1i1
1025 2/ =< 1i2 -1i1 x -1i1
1047 ! (1 - Mulp-) / (1 - Qulp-) -->
1048 ! Case M > Q: (1 - Mulp-) * (1 + Qulp- + (Qulp-)^2 + tiny) -->
1049 ! 1 - (M-Q)ulp- - (MQ-QQ)(ulp-)^2 + tiny -->
1050 ! 1 - (M-Q)ulp- - tiny.
1100 A/ => Td2 Tp1d1 x 1m1d3
1101 A/ 0< Td2 Tp1d1 x 1m1d4
1102 A/ => -Td2 -Tp1d1 x 1m1d3
1103 A/ 0< -Td2 -Tp1d1 x 1m1d4
1104 A/ =< -Td2 Tp1d1 x -1m1d3
1105 A/ 0> -Td2 Tp1d1 x -1m1d4
1106 A/ =< Td2 -Tp1d1 x -1m1d3
1107 A/ 0> Td2 -Tp1d1 x -1m1d4