decimal 2.1.0

Decimal floating point arithmetic for Rust
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
------------------------------------------------------------------------
-- comparesig.decTest -- decimal comparison that signals on NaNs      --
-- Copyright (c) Mike Cowlishaw,  1981, 2010.  All rights reserved.   --
-- Parts copyright (c) IBM Corporation, 1981, 2008.                   --
------------------------------------------------------------------------
-- Please see the document "General Decimal Arithmetic Testcases"     --
-- at http://speleotrove.com/decimal for the description of           --
-- these testcases.                                                   --
--                                                                    --
-- These testcases are experimental ('beta' versions), and they       --
-- may contain errors.  They are offered on an as-is basis.  In       --
-- particular, achieving the same results as the tests here is not    --
-- a guarantee that an implementation complies with any Standard      --
-- or specification.  The tests are not exhaustive.                   --
--                                                                    --
-- Please send comments, suggestions, and corrections to the author:  --
--   Mike Cowlishaw, mfc@speleotrove.com                              --
------------------------------------------------------------------------
version: 2.62

-- This testcase is the same as compare.decTest except that both
-- quiet and signaling NaNs raise invalid (and propagate payloads)

extended: 1

precision:   9
rounding:    half_up
maxExponent: 999
minexponent: -999

-- sanity checks
cmsx001 comparesig  -2  -2  -> 0
cmsx002 comparesig  -2  -1  -> -1
cmsx003 comparesig  -2   0  -> -1
cmsx004 comparesig  -2   1  -> -1
cmsx005 comparesig  -2   2  -> -1
cmsx006 comparesig  -1  -2  -> 1
cmsx007 comparesig  -1  -1  -> 0
cmsx008 comparesig  -1   0  -> -1
cmsx009 comparesig  -1   1  -> -1
cmsx010 comparesig  -1   2  -> -1
cmsx011 comparesig   0  -2  -> 1
cmsx012 comparesig   0  -1  -> 1
cmsx013 comparesig   0   0  -> 0
cmsx014 comparesig   0   1  -> -1
cmsx015 comparesig   0   2  -> -1
cmsx016 comparesig   1  -2  -> 1
cmsx017 comparesig   1  -1  -> 1
cmsx018 comparesig   1   0  -> 1
cmsx019 comparesig   1   1  -> 0
cmsx020 comparesig   1   2  -> -1
cmsx021 comparesig   2  -2  -> 1
cmsx022 comparesig   2  -1  -> 1
cmsx023 comparesig   2   0  -> 1
cmsx025 comparesig   2   1  -> 1
cmsx026 comparesig   2   2  -> 0

cmsx031 comparesig  -20  -20  -> 0
cmsx032 comparesig  -20  -10  -> -1
cmsx033 comparesig  -20   00  -> -1
cmsx034 comparesig  -20   10  -> -1
cmsx035 comparesig  -20   20  -> -1
cmsx036 comparesig  -10  -20  -> 1
cmsx037 comparesig  -10  -10  -> 0
cmsx038 comparesig  -10   00  -> -1
cmsx039 comparesig  -10   10  -> -1
cmsx040 comparesig  -10   20  -> -1
cmsx041 comparesig   00  -20  -> 1
cmsx042 comparesig   00  -10  -> 1
cmsx043 comparesig   00   00  -> 0
cmsx044 comparesig   00   10  -> -1
cmsx045 comparesig   00   20  -> -1
cmsx046 comparesig   10  -20  -> 1
cmsx047 comparesig   10  -10  -> 1
cmsx048 comparesig   10   00  -> 1
cmsx049 comparesig   10   10  -> 0
cmsx050 comparesig   10   20  -> -1
cmsx051 comparesig   20  -20  -> 1
cmsx052 comparesig   20  -10  -> 1
cmsx053 comparesig   20   00  -> 1
cmsx055 comparesig   20   10  -> 1
cmsx056 comparesig   20   20  -> 0

cmsx061 comparesig  -2.0  -2.0  -> 0
cmsx062 comparesig  -2.0  -1.0  -> -1
cmsx063 comparesig  -2.0   0.0  -> -1
cmsx064 comparesig  -2.0   1.0  -> -1
cmsx065 comparesig  -2.0   2.0  -> -1
cmsx066 comparesig  -1.0  -2.0  -> 1
cmsx067 comparesig  -1.0  -1.0  -> 0
cmsx068 comparesig  -1.0   0.0  -> -1
cmsx069 comparesig  -1.0   1.0  -> -1
cmsx070 comparesig  -1.0   2.0  -> -1
cmsx071 comparesig   0.0  -2.0  -> 1
cmsx072 comparesig   0.0  -1.0  -> 1
cmsx073 comparesig   0.0   0.0  -> 0
cmsx074 comparesig   0.0   1.0  -> -1
cmsx075 comparesig   0.0   2.0  -> -1
cmsx076 comparesig   1.0  -2.0  -> 1
cmsx077 comparesig   1.0  -1.0  -> 1
cmsx078 comparesig   1.0   0.0  -> 1
cmsx079 comparesig   1.0   1.0  -> 0
cmsx080 comparesig   1.0   2.0  -> -1
cmsx081 comparesig   2.0  -2.0  -> 1
cmsx082 comparesig   2.0  -1.0  -> 1
cmsx083 comparesig   2.0   0.0  -> 1
cmsx085 comparesig   2.0   1.0  -> 1
cmsx086 comparesig   2.0   2.0  -> 0

-- now some cases which might overflow if subtract were used
maxexponent: 999999999
minexponent: -999999999
cmsx090 comparesig  9.99999999E+999999999 9.99999999E+999999999  -> 0
cmsx091 comparesig -9.99999999E+999999999 9.99999999E+999999999  -> -1
cmsx092 comparesig  9.99999999E+999999999 -9.99999999E+999999999 -> 1
cmsx093 comparesig -9.99999999E+999999999 -9.99999999E+999999999 -> 0

-- some differing length/exponent cases
cmsx100 comparesig   7.0    7.0    -> 0
cmsx101 comparesig   7.0    7      -> 0
cmsx102 comparesig   7      7.0    -> 0
cmsx103 comparesig   7E+0   7.0    -> 0
cmsx104 comparesig   70E-1  7.0    -> 0
cmsx105 comparesig   0.7E+1 7      -> 0
cmsx106 comparesig   70E-1  7      -> 0
cmsx107 comparesig   7.0    7E+0   -> 0
cmsx108 comparesig   7.0    70E-1  -> 0
cmsx109 comparesig   7      0.7E+1 -> 0
cmsx110 comparesig   7      70E-1  -> 0

cmsx120 comparesig   8.0    7.0    -> 1
cmsx121 comparesig   8.0    7      -> 1
cmsx122 comparesig   8      7.0    -> 1
cmsx123 comparesig   8E+0   7.0    -> 1
cmsx124 comparesig   80E-1  7.0    -> 1
cmsx125 comparesig   0.8E+1 7      -> 1
cmsx126 comparesig   80E-1  7      -> 1
cmsx127 comparesig   8.0    7E+0   -> 1
cmsx128 comparesig   8.0    70E-1  -> 1
cmsx129 comparesig   8      0.7E+1  -> 1
cmsx130 comparesig   8      70E-1  -> 1

cmsx140 comparesig   8.0    9.0    -> -1
cmsx141 comparesig   8.0    9      -> -1
cmsx142 comparesig   8      9.0    -> -1
cmsx143 comparesig   8E+0   9.0    -> -1
cmsx144 comparesig   80E-1  9.0    -> -1
cmsx145 comparesig   0.8E+1 9      -> -1
cmsx146 comparesig   80E-1  9      -> -1
cmsx147 comparesig   8.0    9E+0   -> -1
cmsx148 comparesig   8.0    90E-1  -> -1
cmsx149 comparesig   8      0.9E+1 -> -1
cmsx150 comparesig   8      90E-1  -> -1

-- and again, with sign changes -+ ..
cmsx200 comparesig  -7.0    7.0    -> -1
cmsx201 comparesig  -7.0    7      -> -1
cmsx202 comparesig  -7      7.0    -> -1
cmsx203 comparesig  -7E+0   7.0    -> -1
cmsx204 comparesig  -70E-1  7.0    -> -1
cmsx205 comparesig  -0.7E+1 7      -> -1
cmsx206 comparesig  -70E-1  7      -> -1
cmsx207 comparesig  -7.0    7E+0   -> -1
cmsx208 comparesig  -7.0    70E-1  -> -1
cmsx209 comparesig  -7      0.7E+1 -> -1
cmsx210 comparesig  -7      70E-1  -> -1

cmsx220 comparesig  -8.0    7.0    -> -1
cmsx221 comparesig  -8.0    7      -> -1
cmsx222 comparesig  -8      7.0    -> -1
cmsx223 comparesig  -8E+0   7.0    -> -1
cmsx224 comparesig  -80E-1  7.0    -> -1
cmsx225 comparesig  -0.8E+1 7      -> -1
cmsx226 comparesig  -80E-1  7      -> -1
cmsx227 comparesig  -8.0    7E+0   -> -1
cmsx228 comparesig  -8.0    70E-1  -> -1
cmsx229 comparesig  -8      0.7E+1 -> -1
cmsx230 comparesig  -8      70E-1  -> -1

cmsx240 comparesig  -8.0    9.0    -> -1
cmsx241 comparesig  -8.0    9      -> -1
cmsx242 comparesig  -8      9.0    -> -1
cmsx243 comparesig  -8E+0   9.0    -> -1
cmsx244 comparesig  -80E-1  9.0    -> -1
cmsx245 comparesig  -0.8E+1 9      -> -1
cmsx246 comparesig  -80E-1  9      -> -1
cmsx247 comparesig  -8.0    9E+0   -> -1
cmsx248 comparesig  -8.0    90E-1  -> -1
cmsx249 comparesig  -8      0.9E+1 -> -1
cmsx250 comparesig  -8      90E-1  -> -1

-- and again, with sign changes +- ..
cmsx300 comparesig   7.0    -7.0    -> 1
cmsx301 comparesig   7.0    -7      -> 1
cmsx302 comparesig   7      -7.0    -> 1
cmsx303 comparesig   7E+0   -7.0    -> 1
cmsx304 comparesig   70E-1  -7.0    -> 1
cmsx305 comparesig   .7E+1  -7      -> 1
cmsx306 comparesig   70E-1  -7      -> 1
cmsx307 comparesig   7.0    -7E+0   -> 1
cmsx308 comparesig   7.0    -70E-1  -> 1
cmsx309 comparesig   7      -.7E+1  -> 1
cmsx310 comparesig   7      -70E-1  -> 1

cmsx320 comparesig   8.0    -7.0    -> 1
cmsx321 comparesig   8.0    -7      -> 1
cmsx322 comparesig   8      -7.0    -> 1
cmsx323 comparesig   8E+0   -7.0    -> 1
cmsx324 comparesig   80E-1  -7.0    -> 1
cmsx325 comparesig   .8E+1  -7      -> 1
cmsx326 comparesig   80E-1  -7      -> 1
cmsx327 comparesig   8.0    -7E+0   -> 1
cmsx328 comparesig   8.0    -70E-1  -> 1
cmsx329 comparesig   8      -.7E+1  -> 1
cmsx330 comparesig   8      -70E-1  -> 1

cmsx340 comparesig   8.0    -9.0    -> 1
cmsx341 comparesig   8.0    -9      -> 1
cmsx342 comparesig   8      -9.0    -> 1
cmsx343 comparesig   8E+0   -9.0    -> 1
cmsx344 comparesig   80E-1  -9.0    -> 1
cmsx345 comparesig   .8E+1  -9      -> 1
cmsx346 comparesig   80E-1  -9      -> 1
cmsx347 comparesig   8.0    -9E+0   -> 1
cmsx348 comparesig   8.0    -90E-1  -> 1
cmsx349 comparesig   8      -.9E+1  -> 1
cmsx350 comparesig   8      -90E-1  -> 1

-- and again, with sign changes -- ..
cmsx400 comparesig   -7.0    -7.0    -> 0
cmsx401 comparesig   -7.0    -7      -> 0
cmsx402 comparesig   -7      -7.0    -> 0
cmsx403 comparesig   -7E+0   -7.0    -> 0
cmsx404 comparesig   -70E-1  -7.0    -> 0
cmsx405 comparesig   -.7E+1  -7      -> 0
cmsx406 comparesig   -70E-1  -7      -> 0
cmsx407 comparesig   -7.0    -7E+0   -> 0
cmsx408 comparesig   -7.0    -70E-1  -> 0
cmsx409 comparesig   -7      -.7E+1  -> 0
cmsx410 comparesig   -7      -70E-1  -> 0

cmsx420 comparesig   -8.0    -7.0    -> -1
cmsx421 comparesig   -8.0    -7      -> -1
cmsx422 comparesig   -8      -7.0    -> -1
cmsx423 comparesig   -8E+0   -7.0    -> -1
cmsx424 comparesig   -80E-1  -7.0    -> -1
cmsx425 comparesig   -.8E+1  -7      -> -1
cmsx426 comparesig   -80E-1  -7      -> -1
cmsx427 comparesig   -8.0    -7E+0   -> -1
cmsx428 comparesig   -8.0    -70E-1  -> -1
cmsx429 comparesig   -8      -.7E+1  -> -1
cmsx430 comparesig   -8      -70E-1  -> -1

cmsx440 comparesig   -8.0    -9.0    -> 1
cmsx441 comparesig   -8.0    -9      -> 1
cmsx442 comparesig   -8      -9.0    -> 1
cmsx443 comparesig   -8E+0   -9.0    -> 1
cmsx444 comparesig   -80E-1  -9.0    -> 1
cmsx445 comparesig   -.8E+1  -9      -> 1
cmsx446 comparesig   -80E-1  -9      -> 1
cmsx447 comparesig   -8.0    -9E+0   -> 1
cmsx448 comparesig   -8.0    -90E-1  -> 1
cmsx449 comparesig   -8      -.9E+1  -> 1
cmsx450 comparesig   -8      -90E-1  -> 1


-- testcases that subtract to lots of zeros at boundaries [pgr]
precision: 40
cmsx470 comparesig 123.4560000000000000E789 123.456E789 -> 0
cmsx471 comparesig 123.456000000000000E-89 123.456E-89 -> 0
cmsx472 comparesig 123.45600000000000E789 123.456E789 -> 0
cmsx473 comparesig 123.4560000000000E-89 123.456E-89 -> 0
cmsx474 comparesig 123.456000000000E789 123.456E789 -> 0
cmsx475 comparesig 123.45600000000E-89 123.456E-89 -> 0
cmsx476 comparesig 123.4560000000E789 123.456E789 -> 0
cmsx477 comparesig 123.456000000E-89 123.456E-89 -> 0
cmsx478 comparesig 123.45600000E789 123.456E789 -> 0
cmsx479 comparesig 123.4560000E-89 123.456E-89 -> 0
cmsx480 comparesig 123.456000E789 123.456E789 -> 0
cmsx481 comparesig 123.45600E-89 123.456E-89 -> 0
cmsx482 comparesig 123.4560E789 123.456E789 -> 0
cmsx483 comparesig 123.456E-89 123.456E-89 -> 0
cmsx484 comparesig 123.456E-89 123.4560000000000000E-89 -> 0
cmsx485 comparesig 123.456E789 123.456000000000000E789 -> 0
cmsx486 comparesig 123.456E-89 123.45600000000000E-89 -> 0
cmsx487 comparesig 123.456E789 123.4560000000000E789 -> 0
cmsx488 comparesig 123.456E-89 123.456000000000E-89 -> 0
cmsx489 comparesig 123.456E789 123.45600000000E789 -> 0
cmsx490 comparesig 123.456E-89 123.4560000000E-89 -> 0
cmsx491 comparesig 123.456E789 123.456000000E789 -> 0
cmsx492 comparesig 123.456E-89 123.45600000E-89 -> 0
cmsx493 comparesig 123.456E789 123.4560000E789 -> 0
cmsx494 comparesig 123.456E-89 123.456000E-89 -> 0
cmsx495 comparesig 123.456E789 123.45600E789 -> 0
cmsx496 comparesig 123.456E-89 123.4560E-89 -> 0
cmsx497 comparesig 123.456E789 123.456E789 -> 0

-- wide-ranging, around precision; signs equal
precision: 9
cmsx500 comparesig    1     1E-15    -> 1
cmsx501 comparesig    1     1E-14    -> 1
cmsx502 comparesig    1     1E-13    -> 1
cmsx503 comparesig    1     1E-12    -> 1
cmsx504 comparesig    1     1E-11    -> 1
cmsx505 comparesig    1     1E-10    -> 1
cmsx506 comparesig    1     1E-9     -> 1
cmsx507 comparesig    1     1E-8     -> 1
cmsx508 comparesig    1     1E-7     -> 1
cmsx509 comparesig    1     1E-6     -> 1
cmsx510 comparesig    1     1E-5     -> 1
cmsx511 comparesig    1     1E-4     -> 1
cmsx512 comparesig    1     1E-3     -> 1
cmsx513 comparesig    1     1E-2     -> 1
cmsx514 comparesig    1     1E-1     -> 1
cmsx515 comparesig    1     1E-0     -> 0
cmsx516 comparesig    1     1E+1     -> -1
cmsx517 comparesig    1     1E+2     -> -1
cmsx518 comparesig    1     1E+3     -> -1
cmsx519 comparesig    1     1E+4     -> -1
cmsx521 comparesig    1     1E+5     -> -1
cmsx522 comparesig    1     1E+6     -> -1
cmsx523 comparesig    1     1E+7     -> -1
cmsx524 comparesig    1     1E+8     -> -1
cmsx525 comparesig    1     1E+9     -> -1
cmsx526 comparesig    1     1E+10    -> -1
cmsx527 comparesig    1     1E+11    -> -1
cmsx528 comparesig    1     1E+12    -> -1
cmsx529 comparesig    1     1E+13    -> -1
cmsx530 comparesig    1     1E+14    -> -1
cmsx531 comparesig    1     1E+15    -> -1
-- LR swap
cmsx540 comparesig    1E-15  1       -> -1
cmsx541 comparesig    1E-14  1       -> -1
cmsx542 comparesig    1E-13  1       -> -1
cmsx543 comparesig    1E-12  1       -> -1
cmsx544 comparesig    1E-11  1       -> -1
cmsx545 comparesig    1E-10  1       -> -1
cmsx546 comparesig    1E-9   1       -> -1
cmsx547 comparesig    1E-8   1       -> -1
cmsx548 comparesig    1E-7   1       -> -1
cmsx549 comparesig    1E-6   1       -> -1
cmsx550 comparesig    1E-5   1       -> -1
cmsx551 comparesig    1E-4   1       -> -1
cmsx552 comparesig    1E-3   1       -> -1
cmsx553 comparesig    1E-2   1       -> -1
cmsx554 comparesig    1E-1   1       -> -1
cmsx555 comparesig    1E-0   1       ->  0
cmsx556 comparesig    1E+1   1       ->  1
cmsx557 comparesig    1E+2   1       ->  1
cmsx558 comparesig    1E+3   1       ->  1
cmsx559 comparesig    1E+4   1       ->  1
cmsx561 comparesig    1E+5   1       ->  1
cmsx562 comparesig    1E+6   1       ->  1
cmsx563 comparesig    1E+7   1       ->  1
cmsx564 comparesig    1E+8   1       ->  1
cmsx565 comparesig    1E+9   1       ->  1
cmsx566 comparesig    1E+10  1       ->  1
cmsx567 comparesig    1E+11  1       ->  1
cmsx568 comparesig    1E+12  1       ->  1
cmsx569 comparesig    1E+13  1       ->  1
cmsx570 comparesig    1E+14  1       ->  1
cmsx571 comparesig    1E+15  1       ->  1
-- similar with a useful coefficient, one side only
cmsx580 comparesig  0.000000987654321     1E-15    -> 1
cmsx581 comparesig  0.000000987654321     1E-14    -> 1
cmsx582 comparesig  0.000000987654321     1E-13    -> 1
cmsx583 comparesig  0.000000987654321     1E-12    -> 1
cmsx584 comparesig  0.000000987654321     1E-11    -> 1
cmsx585 comparesig  0.000000987654321     1E-10    -> 1
cmsx586 comparesig  0.000000987654321     1E-9     -> 1
cmsx587 comparesig  0.000000987654321     1E-8     -> 1
cmsx588 comparesig  0.000000987654321     1E-7     -> 1
cmsx589 comparesig  0.000000987654321     1E-6     -> -1
cmsx590 comparesig  0.000000987654321     1E-5     -> -1
cmsx591 comparesig  0.000000987654321     1E-4     -> -1
cmsx592 comparesig  0.000000987654321     1E-3     -> -1
cmsx593 comparesig  0.000000987654321     1E-2     -> -1
cmsx594 comparesig  0.000000987654321     1E-1     -> -1
cmsx595 comparesig  0.000000987654321     1E-0     -> -1
cmsx596 comparesig  0.000000987654321     1E+1     -> -1
cmsx597 comparesig  0.000000987654321     1E+2     -> -1
cmsx598 comparesig  0.000000987654321     1E+3     -> -1
cmsx599 comparesig  0.000000987654321     1E+4     -> -1

-- check some unit-y traps
precision: 20
cmsx600 comparesig   12            12.2345 -> -1
cmsx601 comparesig   12.0          12.2345 -> -1
cmsx602 comparesig   12.00         12.2345 -> -1
cmsx603 comparesig   12.000        12.2345 -> -1
cmsx604 comparesig   12.0000       12.2345 -> -1
cmsx605 comparesig   12.00000      12.2345 -> -1
cmsx606 comparesig   12.000000     12.2345 -> -1
cmsx607 comparesig   12.0000000    12.2345 -> -1
cmsx608 comparesig   12.00000000   12.2345 -> -1
cmsx609 comparesig   12.000000000  12.2345 -> -1
cmsx610 comparesig   12.1234 12            ->  1
cmsx611 comparesig   12.1234 12.0          ->  1
cmsx612 comparesig   12.1234 12.00         ->  1
cmsx613 comparesig   12.1234 12.000        ->  1
cmsx614 comparesig   12.1234 12.0000       ->  1
cmsx615 comparesig   12.1234 12.00000      ->  1
cmsx616 comparesig   12.1234 12.000000     ->  1
cmsx617 comparesig   12.1234 12.0000000    ->  1
cmsx618 comparesig   12.1234 12.00000000   ->  1
cmsx619 comparesig   12.1234 12.000000000  ->  1
cmsx620 comparesig  -12           -12.2345 ->  1
cmsx621 comparesig  -12.0         -12.2345 ->  1
cmsx622 comparesig  -12.00        -12.2345 ->  1
cmsx623 comparesig  -12.000       -12.2345 ->  1
cmsx624 comparesig  -12.0000      -12.2345 ->  1
cmsx625 comparesig  -12.00000     -12.2345 ->  1
cmsx626 comparesig  -12.000000    -12.2345 ->  1
cmsx627 comparesig  -12.0000000   -12.2345 ->  1
cmsx628 comparesig  -12.00000000  -12.2345 ->  1
cmsx629 comparesig  -12.000000000 -12.2345 ->  1
cmsx630 comparesig  -12.1234 -12           -> -1
cmsx631 comparesig  -12.1234 -12.0         -> -1
cmsx632 comparesig  -12.1234 -12.00        -> -1
cmsx633 comparesig  -12.1234 -12.000       -> -1
cmsx634 comparesig  -12.1234 -12.0000      -> -1
cmsx635 comparesig  -12.1234 -12.00000     -> -1
cmsx636 comparesig  -12.1234 -12.000000    -> -1
cmsx637 comparesig  -12.1234 -12.0000000   -> -1
cmsx638 comparesig  -12.1234 -12.00000000  -> -1
cmsx639 comparesig  -12.1234 -12.000000000 -> -1
precision: 9

-- extended zeros
cmsx640 comparesig   0     0   -> 0
cmsx641 comparesig   0    -0   -> 0
cmsx642 comparesig   0    -0.0 -> 0
cmsx643 comparesig   0     0.0 -> 0
cmsx644 comparesig  -0     0   -> 0
cmsx645 comparesig  -0    -0   -> 0
cmsx646 comparesig  -0    -0.0 -> 0
cmsx647 comparesig  -0     0.0 -> 0
cmsx648 comparesig   0.0   0   -> 0
cmsx649 comparesig   0.0  -0   -> 0
cmsx650 comparesig   0.0  -0.0 -> 0
cmsx651 comparesig   0.0   0.0 -> 0
cmsx652 comparesig  -0.0   0   -> 0
cmsx653 comparesig  -0.0  -0   -> 0
cmsx654 comparesig  -0.0  -0.0 -> 0
cmsx655 comparesig  -0.0   0.0 -> 0

cmsx656 comparesig  -0E1   0.0 -> 0
cmsx657 comparesig  -0E2   0.0 -> 0
cmsx658 comparesig   0E1   0.0 -> 0
cmsx659 comparesig   0E2   0.0 -> 0
cmsx660 comparesig  -0E1   0   -> 0
cmsx661 comparesig  -0E2   0   -> 0
cmsx662 comparesig   0E1   0   -> 0
cmsx663 comparesig   0E2   0   -> 0
cmsx664 comparesig  -0E1  -0E1 -> 0
cmsx665 comparesig  -0E2  -0E1 -> 0
cmsx666 comparesig   0E1  -0E1 -> 0
cmsx667 comparesig   0E2  -0E1 -> 0
cmsx668 comparesig  -0E1  -0E2 -> 0
cmsx669 comparesig  -0E2  -0E2 -> 0
cmsx670 comparesig   0E1  -0E2 -> 0
cmsx671 comparesig   0E2  -0E2 -> 0
cmsx672 comparesig  -0E1   0E1 -> 0
cmsx673 comparesig  -0E2   0E1 -> 0
cmsx674 comparesig   0E1   0E1 -> 0
cmsx675 comparesig   0E2   0E1 -> 0
cmsx676 comparesig  -0E1   0E2 -> 0
cmsx677 comparesig  -0E2   0E2 -> 0
cmsx678 comparesig   0E1   0E2 -> 0
cmsx679 comparesig   0E2   0E2 -> 0

-- trailing zeros; unit-y
precision: 20
cmsx680 comparesig   12    12           -> 0
cmsx681 comparesig   12    12.0         -> 0
cmsx682 comparesig   12    12.00        -> 0
cmsx683 comparesig   12    12.000       -> 0
cmsx684 comparesig   12    12.0000      -> 0
cmsx685 comparesig   12    12.00000     -> 0
cmsx686 comparesig   12    12.000000    -> 0
cmsx687 comparesig   12    12.0000000   -> 0
cmsx688 comparesig   12    12.00000000  -> 0
cmsx689 comparesig   12    12.000000000 -> 0
cmsx690 comparesig   12              12 -> 0
cmsx691 comparesig   12.0            12 -> 0
cmsx692 comparesig   12.00           12 -> 0
cmsx693 comparesig   12.000          12 -> 0
cmsx694 comparesig   12.0000         12 -> 0
cmsx695 comparesig   12.00000        12 -> 0
cmsx696 comparesig   12.000000       12 -> 0
cmsx697 comparesig   12.0000000      12 -> 0
cmsx698 comparesig   12.00000000     12 -> 0
cmsx699 comparesig   12.000000000    12 -> 0

-- long operand checks
maxexponent: 999
minexponent: -999
precision: 9
cmsx701 comparesig 12345678000  1 ->  1
cmsx702 comparesig 1 12345678000  -> -1
cmsx703 comparesig 1234567800   1 ->  1
cmsx704 comparesig 1 1234567800   -> -1
cmsx705 comparesig 1234567890   1 ->  1
cmsx706 comparesig 1 1234567890   -> -1
cmsx707 comparesig 1234567891   1 ->  1
cmsx708 comparesig 1 1234567891   -> -1
cmsx709 comparesig 12345678901  1 ->  1
cmsx710 comparesig 1 12345678901  -> -1
cmsx711 comparesig 1234567896   1 ->  1
cmsx712 comparesig 1 1234567896   -> -1
cmsx713 comparesig -1234567891  1 -> -1
cmsx714 comparesig 1 -1234567891  ->  1
cmsx715 comparesig -12345678901 1 -> -1
cmsx716 comparesig 1 -12345678901 ->  1
cmsx717 comparesig -1234567896  1 -> -1
cmsx718 comparesig 1 -1234567896  ->  1

precision: 15
-- same with plenty of precision
cmsx721 comparesig 12345678000 1 -> 1
cmsx722 comparesig 1 12345678000 -> -1
cmsx723 comparesig 1234567800  1 -> 1
cmsx724 comparesig 1 1234567800  -> -1
cmsx725 comparesig 1234567890  1 -> 1
cmsx726 comparesig 1 1234567890  -> -1
cmsx727 comparesig 1234567891  1 -> 1
cmsx728 comparesig 1 1234567891  -> -1
cmsx729 comparesig 12345678901 1 -> 1
cmsx730 comparesig 1 12345678901 -> -1
cmsx731 comparesig 1234567896  1 -> 1
cmsx732 comparesig 1 1234567896  -> -1

-- residue cases
precision: 5
cmsx740 comparesig  1  0.9999999  -> 1
cmsx741 comparesig  1  0.999999   -> 1
cmsx742 comparesig  1  0.99999    -> 1
cmsx743 comparesig  1  1.0000     -> 0
cmsx744 comparesig  1  1.00001    -> -1
cmsx745 comparesig  1  1.000001   -> -1
cmsx746 comparesig  1  1.0000001  -> -1
cmsx750 comparesig  0.9999999  1  -> -1
cmsx751 comparesig  0.999999   1  -> -1
cmsx752 comparesig  0.99999    1  -> -1
cmsx753 comparesig  1.0000     1  -> 0
cmsx754 comparesig  1.00001    1  -> 1
cmsx755 comparesig  1.000001   1  -> 1
cmsx756 comparesig  1.0000001  1  -> 1

-- a selection of longies
cmsx760 comparesig -36852134.84194296250843579428931 -5830629.8347085025808756560357940 -> -1
cmsx761 comparesig -36852134.84194296250843579428931 -36852134.84194296250843579428931  -> 0
cmsx762 comparesig -36852134.94194296250843579428931 -36852134.84194296250843579428931  -> -1
cmsx763 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
-- precisions above or below the difference should have no effect
precision:   11
cmsx764 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:   10
cmsx765 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    9
cmsx766 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    8
cmsx767 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    7
cmsx768 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    6
cmsx769 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    5
cmsx770 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    4
cmsx771 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    3
cmsx772 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    2
cmsx773 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1
precision:    1
cmsx774 comparesig -36852134.84194296250843579428931 -36852134.94194296250843579428931  -> 1

-- Specials
precision:   9
cmsx780 comparesig  Inf  -Inf   ->  1
cmsx781 comparesig  Inf  -1000  ->  1
cmsx782 comparesig  Inf  -1     ->  1
cmsx783 comparesig  Inf  -0     ->  1
cmsx784 comparesig  Inf   0     ->  1
cmsx785 comparesig  Inf   1     ->  1
cmsx786 comparesig  Inf   1000  ->  1
cmsx787 comparesig  Inf   Inf   ->  0
cmsx788 comparesig -1000  Inf   -> -1
cmsx789 comparesig -Inf   Inf   -> -1
cmsx790 comparesig -1     Inf   -> -1
cmsx791 comparesig -0     Inf   -> -1
cmsx792 comparesig  0     Inf   -> -1
cmsx793 comparesig  1     Inf   -> -1
cmsx794 comparesig  1000  Inf   -> -1
cmsx795 comparesig  Inf   Inf   ->  0

cmsx800 comparesig -Inf  -Inf   ->  0
cmsx801 comparesig -Inf  -1000  -> -1
cmsx802 comparesig -Inf  -1     -> -1
cmsx803 comparesig -Inf  -0     -> -1
cmsx804 comparesig -Inf   0     -> -1
cmsx805 comparesig -Inf   1     -> -1
cmsx806 comparesig -Inf   1000  -> -1
cmsx807 comparesig -Inf   Inf   -> -1
cmsx808 comparesig -Inf  -Inf   ->  0
cmsx809 comparesig -1000 -Inf   ->  1
cmsx810 comparesig -1    -Inf   ->  1
cmsx811 comparesig -0    -Inf   ->  1
cmsx812 comparesig  0    -Inf   ->  1
cmsx813 comparesig  1    -Inf   ->  1
cmsx814 comparesig  1000 -Inf   ->  1
cmsx815 comparesig  Inf  -Inf   ->  1

cmsx821 comparesig  NaN -Inf    ->  NaN  Invalid_operation
cmsx822 comparesig  NaN -1000   ->  NaN  Invalid_operation
cmsx823 comparesig  NaN -1      ->  NaN  Invalid_operation
cmsx824 comparesig  NaN -0      ->  NaN  Invalid_operation
cmsx825 comparesig  NaN  0      ->  NaN  Invalid_operation
cmsx826 comparesig  NaN  1      ->  NaN  Invalid_operation
cmsx827 comparesig  NaN  1000   ->  NaN  Invalid_operation
cmsx828 comparesig  NaN  Inf    ->  NaN  Invalid_operation
cmsx829 comparesig  NaN  NaN    ->  NaN  Invalid_operation
cmsx830 comparesig -Inf  NaN    ->  NaN  Invalid_operation
cmsx831 comparesig -1000 NaN    ->  NaN  Invalid_operation
cmsx832 comparesig -1    NaN    ->  NaN  Invalid_operation
cmsx833 comparesig -0    NaN    ->  NaN  Invalid_operation
cmsx834 comparesig  0    NaN    ->  NaN  Invalid_operation
cmsx835 comparesig  1    NaN    ->  NaN  Invalid_operation
cmsx836 comparesig  1000 NaN    ->  NaN  Invalid_operation
cmsx837 comparesig  Inf  NaN    ->  NaN  Invalid_operation
cmsx838 comparesig -NaN -NaN    -> -NaN  Invalid_operation
cmsx839 comparesig +NaN -NaN    ->  NaN  Invalid_operation
cmsx840 comparesig -NaN +NaN    -> -NaN  Invalid_operation

cmsx841 comparesig  sNaN -Inf   ->  NaN  Invalid_operation
cmsx842 comparesig  sNaN -1000  ->  NaN  Invalid_operation
cmsx843 comparesig  sNaN -1     ->  NaN  Invalid_operation
cmsx844 comparesig  sNaN -0     ->  NaN  Invalid_operation
cmsx845 comparesig  sNaN  0     ->  NaN  Invalid_operation
cmsx846 comparesig  sNaN  1     ->  NaN  Invalid_operation
cmsx847 comparesig  sNaN  1000  ->  NaN  Invalid_operation
cmsx848 comparesig  sNaN  NaN   ->  NaN  Invalid_operation
cmsx849 comparesig  sNaN sNaN   ->  NaN  Invalid_operation
cmsx850 comparesig  NaN  sNaN   ->  NaN  Invalid_operation
cmsx851 comparesig -Inf  sNaN   ->  NaN  Invalid_operation
cmsx852 comparesig -1000 sNaN   ->  NaN  Invalid_operation
cmsx853 comparesig -1    sNaN   ->  NaN  Invalid_operation
cmsx854 comparesig -0    sNaN   ->  NaN  Invalid_operation
cmsx855 comparesig  0    sNaN   ->  NaN  Invalid_operation
cmsx856 comparesig  1    sNaN   ->  NaN  Invalid_operation
cmsx857 comparesig  1000 sNaN   ->  NaN  Invalid_operation
cmsx858 comparesig  Inf  sNaN   ->  NaN  Invalid_operation
cmsx859 comparesig  NaN  sNaN   ->  NaN  Invalid_operation

-- propagating NaNs
cmsx860 comparesig  NaN9 -Inf   ->  NaN9   Invalid_operation
cmsx861 comparesig  NaN8  999   ->  NaN8   Invalid_operation
cmsx862 comparesig  NaN77 Inf   ->  NaN77  Invalid_operation
cmsx863 comparesig -NaN67 NaN5  -> -NaN67  Invalid_operation
cmsx864 comparesig -Inf  -NaN4  -> -NaN4   Invalid_operation
cmsx865 comparesig -999  -NaN33 -> -NaN33  Invalid_operation
cmsx866 comparesig  Inf   NaN2  ->  NaN2   Invalid_operation
cmsx867 comparesig -NaN41 -NaN42 -> -NaN41 Invalid_operation
cmsx868 comparesig +NaN41 -NaN42 ->  NaN41 Invalid_operation
cmsx869 comparesig -NaN41 +NaN42 -> -NaN41 Invalid_operation
cmsx870 comparesig +NaN41 +NaN42 ->  NaN41 Invalid_operation

cmsx871 comparesig -sNaN99 -Inf    -> -NaN99 Invalid_operation
cmsx872 comparesig  sNaN98 -11     ->  NaN98 Invalid_operation
cmsx873 comparesig  sNaN97  NaN    ->  NaN97 Invalid_operation
cmsx874 comparesig  sNaN16 sNaN94  ->  NaN16 Invalid_operation
cmsx875 comparesig  NaN85  sNaN83  ->  NaN83 Invalid_operation
cmsx876 comparesig -Inf    sNaN92  ->  NaN92 Invalid_operation
cmsx877 comparesig  088    sNaN81  ->  NaN81 Invalid_operation
cmsx878 comparesig  Inf    sNaN90  ->  NaN90 Invalid_operation
cmsx879 comparesig  NaN   -sNaN89  -> -NaN89 Invalid_operation

-- overflow and underflow tests .. subnormal results now allowed
maxExponent: 999999999
minexponent: -999999999
cmsx880 comparesig +1.23456789012345E-0 9E+999999999 -> -1
cmsx881 comparesig 9E+999999999 +1.23456789012345E-0 ->  1
cmsx882 comparesig +0.100 9E-999999999               ->  1
cmsx883 comparesig 9E-999999999 +0.100               -> -1
cmsx885 comparesig -1.23456789012345E-0 9E+999999999 -> -1
cmsx886 comparesig 9E+999999999 -1.23456789012345E-0 ->  1
cmsx887 comparesig -0.100 9E-999999999               -> -1
cmsx888 comparesig 9E-999999999 -0.100               ->  1

cmsx889 comparesig 1e-599999999 1e-400000001   -> -1
cmsx890 comparesig 1e-599999999 1e-400000000   -> -1
cmsx891 comparesig 1e-600000000 1e-400000000   -> -1
cmsx892 comparesig 9e-999999998 0.01           -> -1
cmsx893 comparesig 9e-999999998 0.1            -> -1
cmsx894 comparesig 0.01 9e-999999998           ->  1
cmsx895 comparesig 1e599999999 1e400000001     ->  1
cmsx896 comparesig 1e599999999 1e400000000     ->  1
cmsx897 comparesig 1e600000000 1e400000000     ->  1
cmsx898 comparesig 9e999999998 100             ->  1
cmsx899 comparesig 9e999999998 10              ->  1
cmsx900 comparesig 100  9e999999998            -> -1
-- signs
cmsx901 comparesig  1e+777777777  1e+411111111 ->  1
cmsx902 comparesig  1e+777777777 -1e+411111111 ->  1
cmsx903 comparesig -1e+777777777  1e+411111111 -> -1
cmsx904 comparesig -1e+777777777 -1e+411111111 -> -1
cmsx905 comparesig  1e-777777777  1e-411111111 -> -1
cmsx906 comparesig  1e-777777777 -1e-411111111 ->  1
cmsx907 comparesig -1e-777777777  1e-411111111 -> -1
cmsx908 comparesig -1e-777777777 -1e-411111111 ->  1

-- spread zeros
comx910 comparesig   0E-383  0       ->  0
cmsx911 comparesig   0E-383 -0       ->  0
cmsx912 comparesig  -0E-383  0       ->  0
cmsx913 comparesig  -0E-383 -0       ->  0
cmsx914 comparesig   0E-383  0E+384  ->  0
cmsx915 comparesig   0E-383 -0E+384  ->  0
cmsx916 comparesig  -0E-383  0E+384  ->  0
cmsx917 comparesig  -0E-383 -0E+384  ->  0
cmsx918 comparesig   0       0E+384  ->  0
cmsx919 comparesig   0      -0E+384  ->  0
cmsx920 comparesig  -0       0E+384  ->  0
cmsx921 comparesig  -0      -0E+384  ->  0
cmsx930 comparesig   0E+384  0       ->  0
cmsx931 comparesig   0E+384 -0       ->  0
cmsx932 comparesig  -0E+384  0       ->  0
cmsx933 comparesig  -0E+384 -0       ->  0
cmsx934 comparesig   0E+384  0E-383  ->  0
cmsx935 comparesig   0E+384 -0E-383  ->  0
cmsx936 comparesig  -0E+384  0E-383  ->  0
cmsx937 comparesig  -0E+384 -0E-383  ->  0
cmsx938 comparesig   0       0E-383  ->  0
cmsx939 comparesig   0      -0E-383  ->  0
cmsx940 comparesig  -0       0E-383  ->  0
cmsx941 comparesig  -0      -0E-383  ->  0

-- Null tests
cmsx990 comparesig 10  # -> NaN Invalid_operation
cmsx991 comparesig  # 10 -> NaN Invalid_operation