1/*
2Copyright (C) 1999, 2000  Id Software Inc.
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8This program is distributed in the hope that it will be useful,
9but WITHOUT ANY WARRANTY; without even the implied warranty of
10MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11GNU General Public License for more details.
12You should have received a copy of the GNU General Public License
13along with this program; if not, write to the Free Software
14Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
15*/
16
17// table of quotients and remainders for [-15...16] / [-15...16]
18
19// numerator = -15
20{1, 0},
21{1, -1},
22{1, -2},
23{1, -3},
24{1, -4},
25{1, -5},
26{1, -6},
27{1, -7},
28{2, -1},
29{2, -3},
30{3, 0},
31{3, -3},
32{5, 0},
33{7, -1},
34{15, 0},
35{0, 0},
36{-15, 0},
37{-8, 1},
38{-5, 0},
39{-4, 1},
40{-3, 0},
41{-3, 3},
42{-3, 6},
43{-2, 1},
44{-2, 3},
45{-2, 5},
46{-2, 7},
47{-2, 9},
48{-2, 11},
49{-2, 13},
50{-1, 0},
51{-1, 1},
52// numerator = -14
53{0, -14},
54{1, 0},
55{1, -1},
56{1, -2},
57{1, -3},
58{1, -4},
59{1, -5},
60{1, -6},
61{2, 0},
62{2, -2},
63{2, -4},
64{3, -2},
65{4, -2},
66{7, 0},
67{14, 0},
68{0, 0},
69{-14, 0},
70{-7, 0},
71{-5, 1},
72{-4, 2},
73{-3, 1},
74{-3, 4},
75{-2, 0},
76{-2, 2},
77{-2, 4},
78{-2, 6},
79{-2, 8},
80{-2, 10},
81{-2, 12},
82{-1, 0},
83{-1, 1},
84{-1, 2},
85// numerator = -13
86{0, -13},
87{0, -13},
88{1, 0},
89{1, -1},
90{1, -2},
91{1, -3},
92{1, -4},
93{1, -5},
94{1, -6},
95{2, -1},
96{2, -3},
97{3, -1},
98{4, -1},
99{6, -1},
100{13, 0},
101{0, 0},
102{-13, 0},
103{-7, 1},
104{-5, 2},
105{-4, 3},
106{-3, 2},
107{-3, 5},
108{-2, 1},
109{-2, 3},
110{-2, 5},
111{-2, 7},
112{-2, 9},
113{-2, 11},
114{-1, 0},
115{-1, 1},
116{-1, 2},
117{-1, 3},
118// numerator = -12
119{0, -12},
120{0, -12},
121{0, -12},
122{1, 0},
123{1, -1},
124{1, -2},
125{1, -3},
126{1, -4},
127{1, -5},
128{2, 0},
129{2, -2},
130{3, 0},
131{4, 0},
132{6, 0},
133{12, 0},
134{0, 0},
135{-12, 0},
136{-6, 0},
137{-4, 0},
138{-3, 0},
139{-3, 3},
140{-2, 0},
141{-2, 2},
142{-2, 4},
143{-2, 6},
144{-2, 8},
145{-2, 10},
146{-1, 0},
147{-1, 1},
148{-1, 2},
149{-1, 3},
150{-1, 4},
151// numerator = -11
152{0, -11},
153{0, -11},
154{0, -11},
155{0, -11},
156{1, 0},
157{1, -1},
158{1, -2},
159{1, -3},
160{1, -4},
161{1, -5},
162{2, -1},
163{2, -3},
164{3, -2},
165{5, -1},
166{11, 0},
167{0, 0},
168{-11, 0},
169{-6, 1},
170{-4, 1},
171{-3, 1},
172{-3, 4},
173{-2, 1},
174{-2, 3},
175{-2, 5},
176{-2, 7},
177{-2, 9},
178{-1, 0},
179{-1, 1},
180{-1, 2},
181{-1, 3},
182{-1, 4},
183{-1, 5},
184// numerator = -10
185{0, -10},
186{0, -10},
187{0, -10},
188{0, -10},
189{0, -10},
190{1, 0},
191{1, -1},
192{1, -2},
193{1, -3},
194{1, -4},
195{2, 0},
196{2, -2},
197{3, -1},
198{5, 0},
199{10, 0},
200{0, 0},
201{-10, 0},
202{-5, 0},
203{-4, 2},
204{-3, 2},
205{-2, 0},
206{-2, 2},
207{-2, 4},
208{-2, 6},
209{-2, 8},
210{-1, 0},
211{-1, 1},
212{-1, 2},
213{-1, 3},
214{-1, 4},
215{-1, 5},
216{-1, 6},
217// numerator = -9
218{0, -9},
219{0, -9},
220{0, -9},
221{0, -9},
222{0, -9},
223{0, -9},
224{1, 0},
225{1, -1},
226{1, -2},
227{1, -3},
228{1, -4},
229{2, -1},
230{3, 0},
231{4, -1},
232{9, 0},
233{0, 0},
234{-9, 0},
235{-5, 1},
236{-3, 0},
237{-3, 3},
238{-2, 1},
239{-2, 3},
240{-2, 5},
241{-2, 7},
242{-1, 0},
243{-1, 1},
244{-1, 2},
245{-1, 3},
246{-1, 4},
247{-1, 5},
248{-1, 6},
249{-1, 7},
250// numerator = -8
251{0, -8},
252{0, -8},
253{0, -8},
254{0, -8},
255{0, -8},
256{0, -8},
257{0, -8},
258{1, 0},
259{1, -1},
260{1, -2},
261{1, -3},
262{2, 0},
263{2, -2},
264{4, 0},
265{8, 0},
266{0, 0},
267{-8, 0},
268{-4, 0},
269{-3, 1},
270{-2, 0},
271{-2, 2},
272{-2, 4},
273{-2, 6},
274{-1, 0},
275{-1, 1},
276{-1, 2},
277{-1, 3},
278{-1, 4},
279{-1, 5},
280{-1, 6},
281{-1, 7},
282{-1, 8},
283// numerator = -7
284{0, -7},
285{0, -7},
286{0, -7},
287{0, -7},
288{0, -7},
289{0, -7},
290{0, -7},
291{0, -7},
292{1, 0},
293{1, -1},
294{1, -2},
295{1, -3},
296{2, -1},
297{3, -1},
298{7, 0},
299{0, 0},
300{-7, 0},
301{-4, 1},
302{-3, 2},
303{-2, 1},
304{-2, 3},
305{-2, 5},
306{-1, 0},
307{-1, 1},
308{-1, 2},
309{-1, 3},
310{-1, 4},
311{-1, 5},
312{-1, 6},
313{-1, 7},
314{-1, 8},
315{-1, 9},
316// numerator = -6
317{0, -6},
318{0, -6},
319{0, -6},
320{0, -6},
321{0, -6},
322{0, -6},
323{0, -6},
324{0, -6},
325{0, -6},
326{1, 0},
327{1, -1},
328{1, -2},
329{2, 0},
330{3, 0},
331{6, 0},
332{0, 0},
333{-6, 0},
334{-3, 0},
335{-2, 0},
336{-2, 2},
337{-2, 4},
338{-1, 0},
339{-1, 1},
340{-1, 2},
341{-1, 3},
342{-1, 4},
343{-1, 5},
344{-1, 6},
345{-1, 7},
346{-1, 8},
347{-1, 9},
348{-1, 10},
349// numerator = -5
350{0, -5},
351{0, -5},
352{0, -5},
353{0, -5},
354{0, -5},
355{0, -5},
356{0, -5},
357{0, -5},
358{0, -5},
359{0, -5},
360{1, 0},
361{1, -1},
362{1, -2},
363{2, -1},
364{5, 0},
365{0, 0},
366{-5, 0},
367{-3, 1},
368{-2, 1},
369{-2, 3},
370{-1, 0},
371{-1, 1},
372{-1, 2},
373{-1, 3},
374{-1, 4},
375{-1, 5},
376{-1, 6},
377{-1, 7},
378{-1, 8},
379{-1, 9},
380{-1, 10},
381{-1, 11},
382// numerator = -4
383{0, -4},
384{0, -4},
385{0, -4},
386{0, -4},
387{0, -4},
388{0, -4},
389{0, -4},
390{0, -4},
391{0, -4},
392{0, -4},
393{0, -4},
394{1, 0},
395{1, -1},
396{2, 0},
397{4, 0},
398{0, 0},
399{-4, 0},
400{-2, 0},
401{-2, 2},
402{-1, 0},
403{-1, 1},
404{-1, 2},
405{-1, 3},
406{-1, 4},
407{-1, 5},
408{-1, 6},
409{-1, 7},
410{-1, 8},
411{-1, 9},
412{-1, 10},
413{-1, 11},
414{-1, 12},
415// numerator = -3
416{0, -3},
417{0, -3},
418{0, -3},
419{0, -3},
420{0, -3},
421{0, -3},
422{0, -3},
423{0, -3},
424{0, -3},
425{0, -3},
426{0, -3},
427{0, -3},
428{1, 0},
429{1, -1},
430{3, 0},
431{0, 0},
432{-3, 0},
433{-2, 1},
434{-1, 0},
435{-1, 1},
436{-1, 2},
437{-1, 3},
438{-1, 4},
439{-1, 5},
440{-1, 6},
441{-1, 7},
442{-1, 8},
443{-1, 9},
444{-1, 10},
445{-1, 11},
446{-1, 12},
447{-1, 13},
448// numerator = -2
449{0, -2},
450{0, -2},
451{0, -2},
452{0, -2},
453{0, -2},
454{0, -2},
455{0, -2},
456{0, -2},
457{0, -2},
458{0, -2},
459{0, -2},
460{0, -2},
461{0, -2},
462{1, 0},
463{2, 0},
464{0, 0},
465{-2, 0},
466{-1, 0},
467{-1, 1},
468{-1, 2},
469{-1, 3},
470{-1, 4},
471{-1, 5},
472{-1, 6},
473{-1, 7},
474{-1, 8},
475{-1, 9},
476{-1, 10},
477{-1, 11},
478{-1, 12},
479{-1, 13},
480{-1, 14},
481// numerator = -1
482{0, -1},
483{0, -1},
484{0, -1},
485{0, -1},
486{0, -1},
487{0, -1},
488{0, -1},
489{0, -1},
490{0, -1},
491{0, -1},
492{0, -1},
493{0, -1},
494{0, -1},
495{0, -1},
496{1, 0},
497{0, 0},
498{-1, 0},
499{-1, 1},
500{-1, 2},
501{-1, 3},
502{-1, 4},
503{-1, 5},
504{-1, 6},
505{-1, 7},
506{-1, 8},
507{-1, 9},
508{-1, 10},
509{-1, 11},
510{-1, 12},
511{-1, 13},
512{-1, 14},
513{-1, 15},
514// numerator = 0
515{0, 0},
516{0, 0},
517{0, 0},
518{0, 0},
519{0, 0},
520{0, 0},
521{0, 0},
522{0, 0},
523{0, 0},
524{0, 0},
525{0, 0},
526{0, 0},
527{0, 0},
528{0, 0},
529{0, 0},
530{0, 0},
531{0, 0},
532{0, 0},
533{0, 0},
534{0, 0},
535{0, 0},
536{0, 0},
537{0, 0},
538{0, 0},
539{0, 0},
540{0, 0},
541{0, 0},
542{0, 0},
543{0, 0},
544{0, 0},
545{0, 0},
546{0, 0},
547// numerator = 1
548{-1, -14},
549{-1, -13},
550{-1, -12},
551{-1, -11},
552{-1, -10},
553{-1, -9},
554{-1, -8},
555{-1, -7},
556{-1, -6},
557{-1, -5},
558{-1, -4},
559{-1, -3},
560{-1, -2},
561{-1, -1},
562{-1, 0},
563{0, 0},
564{1, 0},
565{0, 1},
566{0, 1},
567{0, 1},
568{0, 1},
569{0, 1},
570{0, 1},
571{0, 1},
572{0, 1},
573{0, 1},
574{0, 1},
575{0, 1},
576{0, 1},
577{0, 1},
578{0, 1},
579{0, 1},
580// numerator = 2
581{-1, -13},
582{-1, -12},
583{-1, -11},
584{-1, -10},
585{-1, -9},
586{-1, -8},
587{-1, -7},
588{-1, -6},
589{-1, -5},
590{-1, -4},
591{-1, -3},
592{-1, -2},
593{-1, -1},
594{-1, 0},
595{-2, 0},
596{0, 0},
597{2, 0},
598{1, 0},
599{0, 2},
600{0, 2},
601{0, 2},
602{0, 2},
603{0, 2},
604{0, 2},
605{0, 2},
606{0, 2},
607{0, 2},
608{0, 2},
609{0, 2},
610{0, 2},
611{0, 2},
612{0, 2},
613// numerator = 3
614{-1, -12},
615{-1, -11},
616{-1, -10},
617{-1, -9},
618{-1, -8},
619{-1, -7},
620{-1, -6},
621{-1, -5},
622{-1, -4},
623{-1, -3},
624{-1, -2},
625{-1, -1},
626{-1, 0},
627{-2, -1},
628{-3, 0},
629{0, 0},
630{3, 0},
631{1, 1},
632{1, 0},
633{0, 3},
634{0, 3},
635{0, 3},
636{0, 3},
637{0, 3},
638{0, 3},
639{0, 3},
640{0, 3},
641{0, 3},
642{0, 3},
643{0, 3},
644{0, 3},
645{0, 3},
646// numerator = 4
647{-1, -11},
648{-1, -10},
649{-1, -9},
650{-1, -8},
651{-1, -7},
652{-1, -6},
653{-1, -5},
654{-1, -4},
655{-1, -3},
656{-1, -2},
657{-1, -1},
658{-1, 0},
659{-2, -2},
660{-2, 0},
661{-4, 0},
662{0, 0},
663{4, 0},
664{2, 0},
665{1, 1},
666{1, 0},
667{0, 4},
668{0, 4},
669{0, 4},
670{0, 4},
671{0, 4},
672{0, 4},
673{0, 4},
674{0, 4},
675{0, 4},
676{0, 4},
677{0, 4},
678{0, 4},
679// numerator = 5
680{-1, -10},
681{-1, -9},
682{-1, -8},
683{-1, -7},
684{-1, -6},
685{-1, -5},
686{-1, -4},
687{-1, -3},
688{-1, -2},
689{-1, -1},
690{-1, 0},
691{-2, -3},
692{-2, -1},
693{-3, -1},
694{-5, 0},
695{0, 0},
696{5, 0},
697{2, 1},
698{1, 2},
699{1, 1},
700{1, 0},
701{0, 5},
702{0, 5},
703{0, 5},
704{0, 5},
705{0, 5},
706{0, 5},
707{0, 5},
708{0, 5},
709{0, 5},
710{0, 5},
711{0, 5},
712// numerator = 6
713{-1, -9},
714{-1, -8},
715{-1, -7},
716{-1, -6},
717{-1, -5},
718{-1, -4},
719{-1, -3},
720{-1, -2},
721{-1, -1},
722{-1, 0},
723{-2, -4},
724{-2, -2},
725{-2, 0},
726{-3, 0},
727{-6, 0},
728{0, 0},
729{6, 0},
730{3, 0},
731{2, 0},
732{1, 2},
733{1, 1},
734{1, 0},
735{0, 6},
736{0, 6},
737{0, 6},
738{0, 6},
739{0, 6},
740{0, 6},
741{0, 6},
742{0, 6},
743{0, 6},
744{0, 6},
745// numerator = 7
746{-1, -8},
747{-1, -7},
748{-1, -6},
749{-1, -5},
750{-1, -4},
751{-1, -3},
752{-1, -2},
753{-1, -1},
754{-1, 0},
755{-2, -5},
756{-2, -3},
757{-2, -1},
758{-3, -2},
759{-4, -1},
760{-7, 0},
761{0, 0},
762{7, 0},
763{3, 1},
764{2, 1},
765{1, 3},
766{1, 2},
767{1, 1},
768{1, 0},
769{0, 7},
770{0, 7},
771{0, 7},
772{0, 7},
773{0, 7},
774{0, 7},
775{0, 7},
776{0, 7},
777{0, 7},
778// numerator = 8
779{-1, -7},
780{-1, -6},
781{-1, -5},
782{-1, -4},
783{-1, -3},
784{-1, -2},
785{-1, -1},
786{-1, 0},
787{-2, -6},
788{-2, -4},
789{-2, -2},
790{-2, 0},
791{-3, -1},
792{-4, 0},
793{-8, 0},
794{0, 0},
795{8, 0},
796{4, 0},
797{2, 2},
798{2, 0},
799{1, 3},
800{1, 2},
801{1, 1},
802{1, 0},
803{0, 8},
804{0, 8},
805{0, 8},
806{0, 8},
807{0, 8},
808{0, 8},
809{0, 8},
810{0, 8},
811// numerator = 9
812{-1, -6},
813{-1, -5},
814{-1, -4},
815{-1, -3},
816{-1, -2},
817{-1, -1},
818{-1, 0},
819{-2, -7},
820{-2, -5},
821{-2, -3},
822{-2, -1},
823{-3, -3},
824{-3, 0},
825{-5, -1},
826{-9, 0},
827{0, 0},
828{9, 0},
829{4, 1},
830{3, 0},
831{2, 1},
832{1, 4},
833{1, 3},
834{1, 2},
835{1, 1},
836{1, 0},
837{0, 9},
838{0, 9},
839{0, 9},
840{0, 9},
841{0, 9},
842{0, 9},
843{0, 9},
844// numerator = 10
845{-1, -5},
846{-1, -4},
847{-1, -3},
848{-1, -2},
849{-1, -1},
850{-1, 0},
851{-2, -8},
852{-2, -6},
853{-2, -4},
854{-2, -2},
855{-2, 0},
856{-3, -2},
857{-4, -2},
858{-5, 0},
859{-10, 0},
860{0, 0},
861{10, 0},
862{5, 0},
863{3, 1},
864{2, 2},
865{2, 0},
866{1, 4},
867{1, 3},
868{1, 2},
869{1, 1},
870{1, 0},
871{0, 10},
872{0, 10},
873{0, 10},
874{0, 10},
875{0, 10},
876{0, 10},
877// numerator = 11
878{-1, -4},
879{-1, -3},
880{-1, -2},
881{-1, -1},
882{-1, 0},
883{-2, -9},
884{-2, -7},
885{-2, -5},
886{-2, -3},
887{-2, -1},
888{-3, -4},
889{-3, -1},
890{-4, -1},
891{-6, -1},
892{-11, 0},
893{0, 0},
894{11, 0},
895{5, 1},
896{3, 2},
897{2, 3},
898{2, 1},
899{1, 5},
900{1, 4},
901{1, 3},
902{1, 2},
903{1, 1},
904{1, 0},
905{0, 11},
906{0, 11},
907{0, 11},
908{0, 11},
909{0, 11},
910// numerator = 12
911{-1, -3},
912{-1, -2},
913{-1, -1},
914{-1, 0},
915{-2, -10},
916{-2, -8},
917{-2, -6},
918{-2, -4},
919{-2, -2},
920{-2, 0},
921{-3, -3},
922{-3, 0},
923{-4, 0},
924{-6, 0},
925{-12, 0},
926{0, 0},
927{12, 0},
928{6, 0},
929{4, 0},
930{3, 0},
931{2, 2},
932{2, 0},
933{1, 5},
934{1, 4},
935{1, 3},
936{1, 2},
937{1, 1},
938{1, 0},
939{0, 12},
940{0, 12},
941{0, 12},
942{0, 12},
943// numerator = 13
944{-1, -2},
945{-1, -1},
946{-1, 0},
947{-2, -11},
948{-2, -9},
949{-2, -7},
950{-2, -5},
951{-2, -3},
952{-2, -1},
953{-3, -5},
954{-3, -2},
955{-4, -3},
956{-5, -2},
957{-7, -1},
958{-13, 0},
959{0, 0},
960{13, 0},
961{6, 1},
962{4, 1},
963{3, 1},
964{2, 3},
965{2, 1},
966{1, 6},
967{1, 5},
968{1, 4},
969{1, 3},
970{1, 2},
971{1, 1},
972{1, 0},
973{0, 13},
974{0, 13},
975{0, 13},
976// numerator = 14
977{-1, -1},
978{-1, 0},
979{-2, -12},
980{-2, -10},
981{-2, -8},
982{-2, -6},
983{-2, -4},
984{-2, -2},
985{-2, 0},
986{-3, -4},
987{-3, -1},
988{-4, -2},
989{-5, -1},
990{-7, 0},
991{-14, 0},
992{0, 0},
993{14, 0},
994{7, 0},
995{4, 2},
996{3, 2},
997{2, 4},
998{2, 2},
999{2, 0},
1000{1, 6},
1001{1, 5},
1002{1, 4},
1003{1, 3},
1004{1, 2},
1005{1, 1},
1006{1, 0},
1007{0, 14},
1008{0, 14},
1009// numerator = 15
1010{-1, 0},
1011{-2, -13},
1012{-2, -11},
1013{-2, -9},
1014{-2, -7},
1015{-2, -5},
1016{-2, -3},
1017{-2, -1},
1018{-3, -6},
1019{-3, -3},
1020{-3, 0},
1021{-4, -1},
1022{-5, 0},
1023{-8, -1},
1024{-15, 0},
1025{0, 0},
1026{15, 0},
1027{7, 1},
1028{5, 0},
1029{3, 3},
1030{3, 0},
1031{2, 3},
1032{2, 1},
1033{1, 7},
1034{1, 6},
1035{1, 5},
1036{1, 4},
1037{1, 3},
1038{1, 2},
1039{1, 1},
1040{1, 0},
1041{0, 15},
1042// numerator = 16
1043{-2, -14},
1044{-2, -12},
1045{-2, -10},
1046{-2, -8},
1047{-2, -6},
1048{-2, -4},
1049{-2, -2},
1050{-2, 0},
1051{-3, -5},
1052{-3, -2},
1053{-4, -4},
1054{-4, 0},
1055{-6, -2},
1056{-8, 0},
1057{-16, 0},
1058{0, 0},
1059{16, 0},
1060{8, 0},
1061{5, 1},
1062{4, 0},
1063{3, 1},
1064{2, 4},
1065{2, 2},
1066{2, 0},
1067{1, 7},
1068{1, 6},
1069{1, 5},
1070{1, 4},
1071{1, 3},
1072{1, 2},
1073{1, 1},
1074{1, 0},
1075