summaryrefslogtreecommitdiffstats
path: root/Lib/test/decimaltestdata/subtract.decTest
blob: 7895217d9af92dad94236c997c657628332be615 (plain)
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
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
------------------------------------------------------------------------
-- subtract.decTest -- decimal subtraction                            --
-- Copyright (c) IBM Corporation, 1981, 2008.  All rights reserved.   --
------------------------------------------------------------------------
-- Please see the document "General Decimal Arithmetic Testcases"     --
-- at http://www2.hursley.ibm.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, IBM Fellow                                       --
--   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         --
--   mfc@uk.ibm.com                                                   --
------------------------------------------------------------------------
version: 2.59

extended:    1
precision:   9
rounding:    half_up
maxExponent: 384
minexponent: -383

-- [first group are 'quick confidence check']
subx001 subtract  0   0  -> '0'
subx002 subtract  1   1  -> '0'
subx003 subtract  1   2  -> '-1'
subx004 subtract  2   1  -> '1'
subx005 subtract  2   2  -> '0'
subx006 subtract  3   2  -> '1'
subx007 subtract  2   3  -> '-1'

subx011 subtract -0   0  -> '-0'
subx012 subtract -1   1  -> '-2'
subx013 subtract -1   2  -> '-3'
subx014 subtract -2   1  -> '-3'
subx015 subtract -2   2  -> '-4'
subx016 subtract -3   2  -> '-5'
subx017 subtract -2   3  -> '-5'

subx021 subtract  0  -0  -> '0'
subx022 subtract  1  -1  -> '2'
subx023 subtract  1  -2  -> '3'
subx024 subtract  2  -1  -> '3'
subx025 subtract  2  -2  -> '4'
subx026 subtract  3  -2  -> '5'
subx027 subtract  2  -3  -> '5'

subx030 subtract  11  1  -> 10
subx031 subtract  10  1  ->  9
subx032 subtract  9   1  ->  8
subx033 subtract  1   1  ->  0
subx034 subtract  0   1  -> -1
subx035 subtract -1   1  -> -2
subx036 subtract -9   1  -> -10
subx037 subtract -10  1  -> -11
subx038 subtract -11  1  -> -12

subx040 subtract '5.75' '3.3'  -> '2.45'
subx041 subtract '5'    '-3'   -> '8'
subx042 subtract '-5'   '-3'   -> '-2'
subx043 subtract '-7'   '2.5'  -> '-9.5'
subx044 subtract '0.7'  '0.3'  -> '0.4'
subx045 subtract '1.3'  '0.3'  -> '1.0'
subx046 subtract '1.25' '1.25' -> '0.00'

subx050 subtract '1.23456789'    '1.00000000' -> '0.23456789'
subx051 subtract '1.23456789'    '1.00000089' -> '0.23456700'
subx052 subtract '0.5555555559'    '0.0000000001' -> '0.555555556' Inexact Rounded
subx053 subtract '0.5555555559'    '0.0000000005' -> '0.555555555' Inexact Rounded
subx054 subtract '0.4444444444'    '0.1111111111' -> '0.333333333' Inexact Rounded
subx055 subtract '1.0000000000'    '0.00000001' -> '0.999999990' Rounded
subx056 subtract '0.4444444444999'    '0' -> '0.444444444' Inexact Rounded
subx057 subtract '0.4444444445000'    '0' -> '0.444444445' Inexact Rounded

subx060 subtract '70'    '10000e+9' -> '-1.00000000E+13' Inexact Rounded
subx061 subtract '700'    '10000e+9' -> '-1.00000000E+13' Inexact Rounded
subx062 subtract '7000'    '10000e+9' -> '-9.99999999E+12' Inexact Rounded
subx063 subtract '70000'    '10000e+9' -> '-9.99999993E+12' Rounded
subx064 subtract '700000'    '10000e+9' -> '-9.99999930E+12' Rounded
  -- symmetry:
subx065 subtract '10000e+9'    '70' -> '1.00000000E+13' Inexact Rounded
subx066 subtract '10000e+9'    '700' -> '1.00000000E+13' Inexact Rounded
subx067 subtract '10000e+9'    '7000' -> '9.99999999E+12' Inexact Rounded
subx068 subtract '10000e+9'    '70000' -> '9.99999993E+12' Rounded
subx069 subtract '10000e+9'    '700000' -> '9.99999930E+12' Rounded

  -- change precision
subx080 subtract '10000e+9'    '70000' -> '9.99999993E+12' Rounded
precision: 6
subx081 subtract '10000e+9'    '70000' -> '1.00000E+13' Inexact Rounded
precision: 9

  -- some of the next group are really constructor tests
subx090 subtract '00.0'    '0.0'  -> '0.0'
subx091 subtract '00.0'    '0.00' -> '0.00'
subx092 subtract '0.00'    '00.0' -> '0.00'
subx093 subtract '00.0'    '0.00' -> '0.00'
subx094 subtract '0.00'    '00.0' -> '0.00'
subx095 subtract '3'    '.3'   -> '2.7'
subx096 subtract '3.'   '.3'   -> '2.7'
subx097 subtract '3.0'  '.3'   -> '2.7'
subx098 subtract '3.00' '.3'   -> '2.70'
subx099 subtract '3'    '3'    -> '0'
subx100 subtract '3'    '+3'   -> '0'
subx101 subtract '3'    '-3'   -> '6'
subx102 subtract '3'    '0.3'  -> '2.7'
subx103 subtract '3.'   '0.3'  -> '2.7'
subx104 subtract '3.0'  '0.3'  -> '2.7'
subx105 subtract '3.00' '0.3'  -> '2.70'
subx106 subtract '3'    '3.0'  -> '0.0'
subx107 subtract '3'    '+3.0' -> '0.0'
subx108 subtract '3'    '-3.0' -> '6.0'

-- the above all from add; massaged and extended.  Now some new ones...
-- [particularly important for comparisons]
-- NB: -xE-8 below were non-exponents pre-ANSI X3-274, and -1E-7 or 0E-7
-- with input rounding.
subx120 subtract  '10.23456784'    '10.23456789'  -> '-5E-8'
subx121 subtract  '10.23456785'    '10.23456789'  -> '-4E-8'
subx122 subtract  '10.23456786'    '10.23456789'  -> '-3E-8'
subx123 subtract  '10.23456787'    '10.23456789'  -> '-2E-8'
subx124 subtract  '10.23456788'    '10.23456789'  -> '-1E-8'
subx125 subtract  '10.23456789'    '10.23456789'  -> '0E-8'
subx126 subtract  '10.23456790'    '10.23456789'  -> '1E-8'
subx127 subtract  '10.23456791'    '10.23456789'  -> '2E-8'
subx128 subtract  '10.23456792'    '10.23456789'  -> '3E-8'
subx129 subtract  '10.23456793'    '10.23456789'  -> '4E-8'
subx130 subtract  '10.23456794'    '10.23456789'  -> '5E-8'
subx131 subtract  '10.23456781'    '10.23456786'  -> '-5E-8'
subx132 subtract  '10.23456782'    '10.23456786'  -> '-4E-8'
subx133 subtract  '10.23456783'    '10.23456786'  -> '-3E-8'
subx134 subtract  '10.23456784'    '10.23456786'  -> '-2E-8'
subx135 subtract  '10.23456785'    '10.23456786'  -> '-1E-8'
subx136 subtract  '10.23456786'    '10.23456786'  -> '0E-8'
subx137 subtract  '10.23456787'    '10.23456786'  -> '1E-8'
subx138 subtract  '10.23456788'    '10.23456786'  -> '2E-8'
subx139 subtract  '10.23456789'    '10.23456786'  -> '3E-8'
subx140 subtract  '10.23456790'    '10.23456786'  -> '4E-8'
subx141 subtract  '10.23456791'    '10.23456786'  -> '5E-8'
subx142 subtract  '1'              '0.999999999'  -> '1E-9'
subx143 subtract  '0.999999999'    '1'            -> '-1E-9'
subx144 subtract  '-10.23456780'   '-10.23456786' -> '6E-8'
subx145 subtract  '-10.23456790'   '-10.23456786' -> '-4E-8'
subx146 subtract  '-10.23456791'   '-10.23456786' -> '-5E-8'

precision: 3
subx150 subtract '12345678900000' '9999999999999'  -> 2.35E+12 Inexact Rounded
subx151 subtract '9999999999999'  '12345678900000' -> -2.35E+12 Inexact Rounded
precision: 6
subx152 subtract '12345678900000' '9999999999999'  -> 2.34568E+12 Inexact Rounded
subx153 subtract '9999999999999'  '12345678900000' -> -2.34568E+12 Inexact Rounded
precision: 9
subx154 subtract '12345678900000' '9999999999999'  -> 2.34567890E+12 Inexact Rounded
subx155 subtract '9999999999999'  '12345678900000' -> -2.34567890E+12 Inexact Rounded
precision: 12
subx156 subtract '12345678900000' '9999999999999'  -> 2.34567890000E+12 Inexact Rounded
subx157 subtract '9999999999999'  '12345678900000' -> -2.34567890000E+12 Inexact Rounded
precision: 15
subx158 subtract '12345678900000' '9999999999999'  -> 2345678900001
subx159 subtract '9999999999999'  '12345678900000' -> -2345678900001
precision: 9

-- additional scaled arithmetic tests [0.97 problem]
subx160 subtract '0'     '.1'      -> '-0.1'
subx161 subtract '00'    '.97983'  -> '-0.97983'
subx162 subtract '0'     '.9'      -> '-0.9'
subx163 subtract '0'     '0.102'   -> '-0.102'
subx164 subtract '0'     '.4'      -> '-0.4'
subx165 subtract '0'     '.307'    -> '-0.307'
subx166 subtract '0'     '.43822'  -> '-0.43822'
subx167 subtract '0'     '.911'    -> '-0.911'
subx168 subtract '.0'    '.02'     -> '-0.02'
subx169 subtract '00'    '.392'    -> '-0.392'
subx170 subtract '0'     '.26'     -> '-0.26'
subx171 subtract '0'     '0.51'    -> '-0.51'
subx172 subtract '0'     '.2234'   -> '-0.2234'
subx173 subtract '0'     '.2'      -> '-0.2'
subx174 subtract '.0'    '.0008'   -> '-0.0008'
-- 0. on left
subx180 subtract '0.0'     '-.1'      -> '0.1'
subx181 subtract '0.00'    '-.97983'  -> '0.97983'
subx182 subtract '0.0'     '-.9'      -> '0.9'
subx183 subtract '0.0'     '-0.102'   -> '0.102'
subx184 subtract '0.0'     '-.4'      -> '0.4'
subx185 subtract '0.0'     '-.307'    -> '0.307'
subx186 subtract '0.0'     '-.43822'  -> '0.43822'
subx187 subtract '0.0'     '-.911'    -> '0.911'
subx188 subtract '0.0'     '-.02'     -> '0.02'
subx189 subtract '0.00'    '-.392'    -> '0.392'
subx190 subtract '0.0'     '-.26'     -> '0.26'
subx191 subtract '0.0'     '-0.51'    -> '0.51'
subx192 subtract '0.0'     '-.2234'   -> '0.2234'
subx193 subtract '0.0'     '-.2'      -> '0.2'
subx194 subtract '0.0'     '-.0008'   -> '0.0008'
-- negatives of same
subx200 subtract '0'     '-.1'      -> '0.1'
subx201 subtract '00'    '-.97983'  -> '0.97983'
subx202 subtract '0'     '-.9'      -> '0.9'
subx203 subtract '0'     '-0.102'   -> '0.102'
subx204 subtract '0'     '-.4'      -> '0.4'
subx205 subtract '0'     '-.307'    -> '0.307'
subx206 subtract '0'     '-.43822'  -> '0.43822'
subx207 subtract '0'     '-.911'    -> '0.911'
subx208 subtract '.0'    '-.02'     -> '0.02'
subx209 subtract '00'    '-.392'    -> '0.392'
subx210 subtract '0'     '-.26'     -> '0.26'
subx211 subtract '0'     '-0.51'    -> '0.51'
subx212 subtract '0'     '-.2234'   -> '0.2234'
subx213 subtract '0'     '-.2'      -> '0.2'
subx214 subtract '.0'    '-.0008'   -> '0.0008'

-- more fixed, LHS swaps [really the same as testcases under add]
subx220 subtract '-56267E-12' 0  -> '-5.6267E-8'
subx221 subtract '-56267E-11' 0  -> '-5.6267E-7'
subx222 subtract '-56267E-10' 0  -> '-0.0000056267'
subx223 subtract '-56267E-9'  0  -> '-0.000056267'
subx224 subtract '-56267E-8'  0  -> '-0.00056267'
subx225 subtract '-56267E-7'  0  -> '-0.0056267'
subx226 subtract '-56267E-6'  0  -> '-0.056267'
subx227 subtract '-56267E-5'  0  -> '-0.56267'
subx228 subtract '-56267E-2'  0  -> '-562.67'
subx229 subtract '-56267E-1'  0  -> '-5626.7'
subx230 subtract '-56267E-0'  0  -> '-56267'
-- symmetry ...
subx240 subtract 0 '-56267E-12'  -> '5.6267E-8'
subx241 subtract 0 '-56267E-11'  -> '5.6267E-7'
subx242 subtract 0 '-56267E-10'  -> '0.0000056267'
subx243 subtract 0 '-56267E-9'   -> '0.000056267'
subx244 subtract 0 '-56267E-8'   -> '0.00056267'
subx245 subtract 0 '-56267E-7'   -> '0.0056267'
subx246 subtract 0 '-56267E-6'   -> '0.056267'
subx247 subtract 0 '-56267E-5'   -> '0.56267'
subx248 subtract 0 '-56267E-2'   -> '562.67'
subx249 subtract 0 '-56267E-1'   -> '5626.7'
subx250 subtract 0 '-56267E-0'   -> '56267'

-- now some more from the 'new' add
precision: 9
subx301 subtract '1.23456789'  '1.00000000' -> '0.23456789'
subx302 subtract '1.23456789'  '1.00000011' -> '0.23456778'

subx311 subtract '0.4444444444'  '0.5555555555' -> '-0.111111111' Inexact Rounded
subx312 subtract '0.4444444440'  '0.5555555555' -> '-0.111111112' Inexact Rounded
subx313 subtract '0.4444444444'  '0.5555555550' -> '-0.111111111' Inexact Rounded
subx314 subtract '0.44444444449'    '0' -> '0.444444444' Inexact Rounded
subx315 subtract '0.444444444499'   '0' -> '0.444444444' Inexact Rounded
subx316 subtract '0.4444444444999'  '0' -> '0.444444444' Inexact Rounded
subx317 subtract '0.4444444445000'  '0' -> '0.444444445' Inexact Rounded
subx318 subtract '0.4444444445001'  '0' -> '0.444444445' Inexact Rounded
subx319 subtract '0.444444444501'   '0' -> '0.444444445' Inexact Rounded
subx320 subtract '0.44444444451'    '0' -> '0.444444445' Inexact Rounded

-- some carrying effects
subx321 subtract '0.9998'  '0.0000' -> '0.9998'
subx322 subtract '0.9998'  '0.0001' -> '0.9997'
subx323 subtract '0.9998'  '0.0002' -> '0.9996'
subx324 subtract '0.9998'  '0.0003' -> '0.9995'
subx325 subtract '0.9998'  '-0.0000' -> '0.9998'
subx326 subtract '0.9998'  '-0.0001' -> '0.9999'
subx327 subtract '0.9998'  '-0.0002' -> '1.0000'
subx328 subtract '0.9998'  '-0.0003' -> '1.0001'

subx330 subtract '70'  '10000e+9' -> '-1.00000000E+13' Inexact Rounded
subx331 subtract '700'  '10000e+9' -> '-1.00000000E+13' Inexact Rounded
subx332 subtract '7000'  '10000e+9' -> '-9.99999999E+12' Inexact Rounded
subx333 subtract '70000'  '10000e+9' -> '-9.99999993E+12' Rounded
subx334 subtract '700000'  '10000e+9' -> '-9.99999930E+12' Rounded
subx335 subtract '7000000'  '10000e+9' -> '-9.99999300E+12' Rounded
-- symmetry:
subx340 subtract '10000e+9'  '70' -> '1.00000000E+13' Inexact Rounded
subx341 subtract '10000e+9'  '700' -> '1.00000000E+13' Inexact Rounded
subx342 subtract '10000e+9'  '7000' -> '9.99999999E+12' Inexact Rounded
subx343 subtract '10000e+9'  '70000' -> '9.99999993E+12' Rounded
subx344 subtract '10000e+9'  '700000' -> '9.99999930E+12' Rounded
subx345 subtract '10000e+9'  '7000000' -> '9.99999300E+12' Rounded

-- same, higher precision
precision: 15
subx346 subtract '10000e+9'  '7'   -> '9999999999993'
subx347 subtract '10000e+9'  '70'   -> '9999999999930'
subx348 subtract '10000e+9'  '700'   -> '9999999999300'
subx349 subtract '10000e+9'  '7000'   -> '9999999993000'
subx350 subtract '10000e+9'  '70000'   -> '9999999930000'
subx351 subtract '10000e+9'  '700000'   -> '9999999300000'
subx352 subtract '7' '10000e+9'   -> '-9999999999993'
subx353 subtract '70' '10000e+9'   -> '-9999999999930'
subx354 subtract '700' '10000e+9'   -> '-9999999999300'
subx355 subtract '7000' '10000e+9'   -> '-9999999993000'
subx356 subtract '70000' '10000e+9'   -> '-9999999930000'
subx357 subtract '700000' '10000e+9'   -> '-9999999300000'

-- zero preservation
precision: 6
subx360 subtract '10000e+9'  '70000' -> '1.00000E+13' Inexact Rounded
subx361 subtract 1 '0.0001' -> '0.9999'
subx362 subtract 1 '0.00001' -> '0.99999'
subx363 subtract 1 '0.000001' -> '0.999999'
subx364 subtract 1 '0.0000001' -> '1.00000' Inexact Rounded
subx365 subtract 1 '0.00000001' -> '1.00000' Inexact Rounded

-- some funny zeros [in case of bad signum]
subx370 subtract 1  0  -> 1
subx371 subtract 1 0.  -> 1
subx372 subtract 1  .0 -> 1.0
subx373 subtract 1 0.0 -> 1.0
subx374 subtract  0  1 -> -1
subx375 subtract 0.  1 -> -1
subx376 subtract  .0 1 -> -1.0
subx377 subtract 0.0 1 -> -1.0

precision: 9

-- leading 0 digit before round
subx910 subtract -103519362 -51897955.3 -> -51621406.7
subx911 subtract 159579.444 89827.5229 -> 69751.9211

subx920 subtract 333.123456 33.1234566 -> 299.999999 Inexact Rounded
subx921 subtract 333.123456 33.1234565 -> 300.000000 Inexact Rounded
subx922 subtract 133.123456 33.1234565 ->  99.9999995
subx923 subtract 133.123456 33.1234564 ->  99.9999996
subx924 subtract 133.123456 33.1234540 -> 100.000002 Rounded
subx925 subtract 133.123456 43.1234560 ->  90.0000000
subx926 subtract 133.123456 43.1234561 ->  89.9999999
subx927 subtract 133.123456 43.1234566 ->  89.9999994
subx928 subtract 101.123456 91.1234566 ->   9.9999994
subx929 subtract 101.123456 99.1234566 ->   1.9999994

-- more of the same; probe for cluster boundary problems
precision: 1
subx930 subtract  11 2           -> 9
precision: 2
subx932 subtract 101 2           -> 99
precision: 3
subx934 subtract 101 2.1         -> 98.9
subx935 subtract 101 92.01       ->  8.99
precision: 4
subx936 subtract 101 2.01        -> 98.99
subx937 subtract 101 92.01       ->  8.99
subx938 subtract 101 92.006      ->  8.994
precision: 5
subx939 subtract 101 2.001       -> 98.999
subx940 subtract 101 92.001      ->  8.999
subx941 subtract 101 92.0006     ->  8.9994
precision: 6
subx942 subtract 101 2.0001      -> 98.9999
subx943 subtract 101 92.0001     ->  8.9999
subx944 subtract 101 92.00006    ->  8.99994
precision: 7
subx945 subtract 101 2.00001     -> 98.99999
subx946 subtract 101 92.00001    ->  8.99999
subx947 subtract 101 92.000006   ->  8.999994
precision: 8
subx948 subtract 101 2.000001    -> 98.999999
subx949 subtract 101 92.000001   ->  8.999999
subx950 subtract 101 92.0000006  ->  8.9999994
precision: 9
subx951 subtract 101 2.0000001   -> 98.9999999
subx952 subtract 101 92.0000001  ->  8.9999999
subx953 subtract 101 92.00000006 ->  8.99999994

precision: 9

-- more LHS swaps [were fixed]
subx390 subtract '-56267E-10'   0 ->  '-0.0000056267'
subx391 subtract '-56267E-6'    0 ->  '-0.056267'
subx392 subtract '-56267E-5'    0 ->  '-0.56267'
subx393 subtract '-56267E-4'    0 ->  '-5.6267'
subx394 subtract '-56267E-3'    0 ->  '-56.267'
subx395 subtract '-56267E-2'    0 ->  '-562.67'
subx396 subtract '-56267E-1'    0 ->  '-5626.7'
subx397 subtract '-56267E-0'    0 ->  '-56267'
subx398 subtract '-5E-10'       0 ->  '-5E-10'
subx399 subtract '-5E-7'        0 ->  '-5E-7'
subx400 subtract '-5E-6'        0 ->  '-0.000005'
subx401 subtract '-5E-5'        0 ->  '-0.00005'
subx402 subtract '-5E-4'        0 ->  '-0.0005'
subx403 subtract '-5E-1'        0 ->  '-0.5'
subx404 subtract '-5E0'         0 ->  '-5'
subx405 subtract '-5E1'         0 ->  '-50'
subx406 subtract '-5E5'         0 ->  '-500000'
subx407 subtract '-5E8'         0 ->  '-500000000'
subx408 subtract '-5E9'         0 ->  '-5.00000000E+9'   Rounded
subx409 subtract '-5E10'        0 ->  '-5.00000000E+10'  Rounded
subx410 subtract '-5E11'        0 ->  '-5.00000000E+11'  Rounded
subx411 subtract '-5E100'       0 ->  '-5.00000000E+100' Rounded

-- more RHS swaps [were fixed]
subx420 subtract 0  '-56267E-10' ->  '0.0000056267'
subx421 subtract 0  '-56267E-6'  ->  '0.056267'
subx422 subtract 0  '-56267E-5'  ->  '0.56267'
subx423 subtract 0  '-56267E-4'  ->  '5.6267'
subx424 subtract 0  '-56267E-3'  ->  '56.267'
subx425 subtract 0  '-56267E-2'  ->  '562.67'
subx426 subtract 0  '-56267E-1'  ->  '5626.7'
subx427 subtract 0  '-56267E-0'  ->  '56267'
subx428 subtract 0  '-5E-10'     ->  '5E-10'
subx429 subtract 0  '-5E-7'      ->  '5E-7'
subx430 subtract 0  '-5E-6'      ->  '0.000005'
subx431 subtract 0  '-5E-5'      ->  '0.00005'
subx432 subtract 0  '-5E-4'      ->  '0.0005'
subx433 subtract 0  '-5E-1'      ->  '0.5'
subx434 subtract 0  '-5E0'       ->  '5'
subx435 subtract 0  '-5E1'       ->  '50'
subx436 subtract 0  '-5E5'       ->  '500000'
subx437 subtract 0  '-5E8'       ->  '500000000'
subx438 subtract 0  '-5E9'       ->  '5.00000000E+9'    Rounded
subx439 subtract 0  '-5E10'      ->  '5.00000000E+10'   Rounded
subx440 subtract 0  '-5E11'      ->  '5.00000000E+11'   Rounded
subx441 subtract 0  '-5E100'     ->  '5.00000000E+100'  Rounded


-- try borderline precision, with carries, etc.
precision: 15
subx461 subtract '1E+12' '1'       -> '999999999999'
subx462 subtract '1E+12' '-1.11'   -> '1000000000001.11'
subx463 subtract '1.11'  '-1E+12'  -> '1000000000001.11'
subx464 subtract '-1'    '-1E+12'  -> '999999999999'
subx465 subtract '7E+12' '1'       -> '6999999999999'
subx466 subtract '7E+12' '-1.11'   -> '7000000000001.11'
subx467 subtract '1.11'  '-7E+12'  -> '7000000000001.11'
subx468 subtract '-1'    '-7E+12'  -> '6999999999999'

--                 123456789012345       123456789012345      1 23456789012345
subx470 subtract '0.444444444444444'  '-0.555555555555563' -> '1.00000000000001' Inexact Rounded
subx471 subtract '0.444444444444444'  '-0.555555555555562' -> '1.00000000000001' Inexact Rounded
subx472 subtract '0.444444444444444'  '-0.555555555555561' -> '1.00000000000001' Inexact Rounded
subx473 subtract '0.444444444444444'  '-0.555555555555560' -> '1.00000000000000' Inexact Rounded
subx474 subtract '0.444444444444444'  '-0.555555555555559' -> '1.00000000000000' Inexact Rounded
subx475 subtract '0.444444444444444'  '-0.555555555555558' -> '1.00000000000000' Inexact Rounded
subx476 subtract '0.444444444444444'  '-0.555555555555557' -> '1.00000000000000' Inexact Rounded
subx477 subtract '0.444444444444444'  '-0.555555555555556' -> '1.00000000000000' Rounded
subx478 subtract '0.444444444444444'  '-0.555555555555555' -> '0.999999999999999'
subx479 subtract '0.444444444444444'  '-0.555555555555554' -> '0.999999999999998'
subx480 subtract '0.444444444444444'  '-0.555555555555553' -> '0.999999999999997'
subx481 subtract '0.444444444444444'  '-0.555555555555552' -> '0.999999999999996'
subx482 subtract '0.444444444444444'  '-0.555555555555551' -> '0.999999999999995'
subx483 subtract '0.444444444444444'  '-0.555555555555550' -> '0.999999999999994'

-- and some more, including residue effects and different roundings
precision: 9
rounding: half_up
subx500 subtract '123456789' 0             -> '123456789'
subx501 subtract '123456789' 0.000000001   -> '123456789' Inexact Rounded
subx502 subtract '123456789' 0.000001      -> '123456789' Inexact Rounded
subx503 subtract '123456789' 0.1           -> '123456789' Inexact Rounded
subx504 subtract '123456789' 0.4           -> '123456789' Inexact Rounded
subx505 subtract '123456789' 0.49          -> '123456789' Inexact Rounded
subx506 subtract '123456789' 0.499999      -> '123456789' Inexact Rounded
subx507 subtract '123456789' 0.499999999   -> '123456789' Inexact Rounded
subx508 subtract '123456789' 0.5           -> '123456789' Inexact Rounded
subx509 subtract '123456789' 0.500000001   -> '123456788' Inexact Rounded
subx510 subtract '123456789' 0.500001      -> '123456788' Inexact Rounded
subx511 subtract '123456789' 0.51          -> '123456788' Inexact Rounded
subx512 subtract '123456789' 0.6           -> '123456788' Inexact Rounded
subx513 subtract '123456789' 0.9           -> '123456788' Inexact Rounded
subx514 subtract '123456789' 0.99999       -> '123456788' Inexact Rounded
subx515 subtract '123456789' 0.999999999   -> '123456788' Inexact Rounded
subx516 subtract '123456789' 1             -> '123456788'
subx517 subtract '123456789' 1.000000001   -> '123456788' Inexact Rounded
subx518 subtract '123456789' 1.00001       -> '123456788' Inexact Rounded
subx519 subtract '123456789' 1.1           -> '123456788' Inexact Rounded

rounding: half_even
subx520 subtract '123456789' 0             -> '123456789'
subx521 subtract '123456789' 0.000000001   -> '123456789' Inexact Rounded
subx522 subtract '123456789' 0.000001      -> '123456789' Inexact Rounded
subx523 subtract '123456789' 0.1           -> '123456789' Inexact Rounded
subx524 subtract '123456789' 0.4           -> '123456789' Inexact Rounded
subx525 subtract '123456789' 0.49          -> '123456789' Inexact Rounded
subx526 subtract '123456789' 0.499999      -> '123456789' Inexact Rounded
subx527 subtract '123456789' 0.499999999   -> '123456789' Inexact Rounded
subx528 subtract '123456789' 0.5           -> '123456788' Inexact Rounded
subx529 subtract '123456789' 0.500000001   -> '123456788' Inexact Rounded
subx530 subtract '123456789' 0.500001      -> '123456788' Inexact Rounded
subx531 subtract '123456789' 0.51          -> '123456788' Inexact Rounded
subx532 subtract '123456789' 0.6           -> '123456788' Inexact Rounded
subx533 subtract '123456789' 0.9           -> '123456788' Inexact Rounded
subx534 subtract '123456789' 0.99999       -> '123456788' Inexact Rounded
subx535 subtract '123456789' 0.999999999   -> '123456788' Inexact Rounded
subx536 subtract '123456789' 1             -> '123456788'
subx537 subtract '123456789' 1.00000001    -> '123456788' Inexact Rounded
subx538 subtract '123456789' 1.00001       -> '123456788' Inexact Rounded
subx539 subtract '123456789' 1.1           -> '123456788' Inexact Rounded
-- critical few with even bottom digit...
subx540 subtract '123456788' 0.499999999   -> '123456788' Inexact Rounded
subx541 subtract '123456788' 0.5           -> '123456788' Inexact Rounded
subx542 subtract '123456788' 0.500000001   -> '123456787' Inexact Rounded

rounding: down
subx550 subtract '123456789' 0             -> '123456789'
subx551 subtract '123456789' 0.000000001   -> '123456788' Inexact Rounded
subx552 subtract '123456789' 0.000001      -> '123456788' Inexact Rounded
subx553 subtract '123456789' 0.1           -> '123456788' Inexact Rounded
subx554 subtract '123456789' 0.4           -> '123456788' Inexact Rounded
subx555 subtract '123456789' 0.49          -> '123456788' Inexact Rounded
subx556 subtract '123456789' 0.499999      -> '123456788' Inexact Rounded
subx557 subtract '123456789' 0.499999999   -> '123456788' Inexact Rounded
subx558 subtract '123456789' 0.5           -> '123456788' Inexact Rounded
subx559 subtract '123456789' 0.500000001   -> '123456788' Inexact Rounded
subx560 subtract '123456789' 0.500001      -> '123456788' Inexact Rounded
subx561 subtract '123456789' 0.51          -> '123456788' Inexact Rounded
subx562 subtract '123456789' 0.6           -> '123456788' Inexact Rounded
subx563 subtract '123456789' 0.9           -> '123456788' Inexact Rounded
subx564 subtract '123456789' 0.99999       -> '123456788' Inexact Rounded
subx565 subtract '123456789' 0.999999999   -> '123456788' Inexact Rounded
subx566 subtract '123456789' 1             -> '123456788'
subx567 subtract '123456789' 1.00000001    -> '123456787' Inexact Rounded
subx568 subtract '123456789' 1.00001       -> '123456787' Inexact Rounded
subx569 subtract '123456789' 1.1           -> '123456787' Inexact Rounded

-- symmetry...
rounding: half_up
subx600 subtract 0             '123456789' -> '-123456789'
subx601 subtract 0.000000001   '123456789' -> '-123456789' Inexact Rounded
subx602 subtract 0.000001      '123456789' -> '-123456789' Inexact Rounded
subx603 subtract 0.1           '123456789' -> '-123456789' Inexact Rounded
subx604 subtract 0.4           '123456789' -> '-123456789' Inexact Rounded
subx605 subtract 0.49          '123456789' -> '-123456789' Inexact Rounded
subx606 subtract 0.499999      '123456789' -> '-123456789' Inexact Rounded
subx607 subtract 0.499999999   '123456789' -> '-123456789' Inexact Rounded
subx608 subtract 0.5           '123456789' -> '-123456789' Inexact Rounded
subx609 subtract 0.500000001   '123456789' -> '-123456788' Inexact Rounded
subx610 subtract 0.500001      '123456789' -> '-123456788' Inexact Rounded
subx611 subtract 0.51          '123456789' -> '-123456788' Inexact Rounded
subx612 subtract 0.6           '123456789' -> '-123456788' Inexact Rounded
subx613 subtract 0.9           '123456789' -> '-123456788' Inexact Rounded
subx614 subtract 0.99999       '123456789' -> '-123456788' Inexact Rounded
subx615 subtract 0.999999999   '123456789' -> '-123456788' Inexact Rounded
subx616 subtract 1             '123456789' -> '-123456788'
subx617 subtract 1.000000001   '123456789' -> '-123456788' Inexact Rounded
subx618 subtract 1.00001       '123456789' -> '-123456788' Inexact Rounded
subx619 subtract 1.1           '123456789' -> '-123456788' Inexact Rounded

rounding: half_even
subx620 subtract 0             '123456789' -> '-123456789'
subx621 subtract 0.000000001   '123456789' -> '-123456789' Inexact Rounded
subx622 subtract 0.000001      '123456789' -> '-123456789' Inexact Rounded
subx623 subtract 0.1           '123456789' -> '-123456789' Inexact Rounded
subx624 subtract 0.4           '123456789' -> '-123456789' Inexact Rounded
subx625 subtract 0.49          '123456789' -> '-123456789' Inexact Rounded
subx626 subtract 0.499999      '123456789' -> '-123456789' Inexact Rounded
subx627 subtract 0.499999999   '123456789' -> '-123456789' Inexact Rounded
subx628 subtract 0.5           '123456789' -> '-123456788' Inexact Rounded
subx629 subtract 0.500000001   '123456789' -> '-123456788' Inexact Rounded
subx630 subtract 0.500001      '123456789' -> '-123456788' Inexact Rounded
subx631 subtract 0.51          '123456789' -> '-123456788' Inexact Rounded
subx632 subtract 0.6           '123456789' -> '-123456788' Inexact Rounded
subx633 subtract 0.9           '123456789' -> '-123456788' Inexact Rounded
subx634 subtract 0.99999       '123456789' -> '-123456788' Inexact Rounded
subx635 subtract 0.999999999   '123456789' -> '-123456788' Inexact Rounded
subx636 subtract 1             '123456789' -> '-123456788'
subx637 subtract 1.00000001    '123456789' -> '-123456788' Inexact Rounded
subx638 subtract 1.00001       '123456789' -> '-123456788' Inexact Rounded
subx639 subtract 1.1           '123456789' -> '-123456788' Inexact Rounded
-- critical few with even bottom digit...
subx640 subtract 0.499999999   '123456788' -> '-123456788' Inexact Rounded
subx641 subtract 0.5           '123456788' -> '-123456788' Inexact Rounded
subx642 subtract 0.500000001   '123456788' -> '-123456787' Inexact Rounded

rounding: down
subx650 subtract 0             '123456789' -> '-123456789'
subx651 subtract 0.000000001   '123456789' -> '-123456788' Inexact Rounded
subx652 subtract 0.000001      '123456789' -> '-123456788' Inexact Rounded
subx653 subtract 0.1           '123456789' -> '-123456788' Inexact Rounded
subx654 subtract 0.4           '123456789' -> '-123456788' Inexact Rounded
subx655 subtract 0.49          '123456789' -> '-123456788' Inexact Rounded
subx656 subtract 0.499999      '123456789' -> '-123456788' Inexact Rounded
subx657 subtract 0.499999999   '123456789' -> '-123456788' Inexact Rounded
subx658 subtract 0.5           '123456789' -> '-123456788' Inexact Rounded
subx659 subtract 0.500000001   '123456789' -> '-123456788' Inexact Rounded
subx660 subtract 0.500001      '123456789' -> '-123456788' Inexact Rounded
subx661 subtract 0.51          '123456789' -> '-123456788' Inexact Rounded
subx662 subtract 0.6           '123456789' -> '-123456788' Inexact Rounded
subx663 subtract 0.9           '123456789' -> '-123456788' Inexact Rounded
subx664 subtract 0.99999       '123456789' -> '-123456788' Inexact Rounded
subx665 subtract 0.999999999   '123456789' -> '-123456788' Inexact Rounded
subx666 subtract 1             '123456789' -> '-123456788'
subx667 subtract 1.00000001    '123456789' -> '-123456787' Inexact Rounded
subx668 subtract 1.00001       '123456789' -> '-123456787' Inexact Rounded
subx669 subtract 1.1           '123456789' -> '-123456787' Inexact Rounded


-- lots of leading zeros in intermediate result, and showing effects of
-- input rounding would have affected the following
precision: 9
rounding: half_up
subx670 subtract '123456789' '123456788.1' -> 0.9
subx671 subtract '123456789' '123456788.9' -> 0.1
subx672 subtract '123456789' '123456789.1' -> -0.1
subx673 subtract '123456789' '123456789.5' -> -0.5
subx674 subtract '123456789' '123456789.9' -> -0.9

rounding: half_even
subx680 subtract '123456789' '123456788.1' -> 0.9
subx681 subtract '123456789' '123456788.9' -> 0.1
subx682 subtract '123456789' '123456789.1' -> -0.1
subx683 subtract '123456789' '123456789.5' -> -0.5
subx684 subtract '123456789' '123456789.9' -> -0.9

subx685 subtract '123456788' '123456787.1' -> 0.9
subx686 subtract '123456788' '123456787.9' -> 0.1
subx687 subtract '123456788' '123456788.1' -> -0.1
subx688 subtract '123456788' '123456788.5' -> -0.5
subx689 subtract '123456788' '123456788.9' -> -0.9

rounding: down
subx690 subtract '123456789' '123456788.1' -> 0.9
subx691 subtract '123456789' '123456788.9' -> 0.1
subx692 subtract '123456789' '123456789.1' -> -0.1
subx693 subtract '123456789' '123456789.5' -> -0.5
subx694 subtract '123456789' '123456789.9' -> -0.9

-- input preparation tests
rounding: half_up
precision: 3

subx700 subtract '12345678900000'  -9999999999999 ->  '2.23E+13' Inexact Rounded
subx701 subtract  '9999999999999' -12345678900000 ->  '2.23E+13' Inexact Rounded
subx702 subtract '12E+3'  '-3456' ->  '1.55E+4' Inexact Rounded
subx703 subtract '12E+3'  '-3446' ->  '1.54E+4' Inexact Rounded
subx704 subtract '12E+3'  '-3454' ->  '1.55E+4' Inexact Rounded
subx705 subtract '12E+3'  '-3444' ->  '1.54E+4' Inexact Rounded

subx706 subtract '3456'  '-12E+3' ->  '1.55E+4' Inexact Rounded
subx707 subtract '3446'  '-12E+3' ->  '1.54E+4' Inexact Rounded
subx708 subtract '3454'  '-12E+3' ->  '1.55E+4' Inexact Rounded
subx709 subtract '3444'  '-12E+3' ->  '1.54E+4' Inexact Rounded

-- overflow and underflow tests [subnormals now possible]
maxexponent: 999999999
minexponent: -999999999
precision: 9
rounding: down
subx710 subtract 1E+999999999    -9E+999999999   -> 9.99999999E+999999999 Overflow Inexact Rounded
subx711 subtract 9E+999999999    -1E+999999999   -> 9.99999999E+999999999 Overflow Inexact Rounded
rounding: half_up
subx712 subtract 1E+999999999    -9E+999999999   -> Infinity Overflow Inexact Rounded
subx713 subtract 9E+999999999    -1E+999999999   -> Infinity Overflow Inexact Rounded
subx714 subtract -1.1E-999999999 -1E-999999999   -> -1E-1000000000 Subnormal
subx715 subtract 1E-999999999    +1.1e-999999999 -> -1E-1000000000 Subnormal
subx716 subtract -1E+999999999   +9E+999999999   -> -Infinity Overflow Inexact Rounded
subx717 subtract -9E+999999999   +1E+999999999   -> -Infinity Overflow Inexact Rounded
subx718 subtract +1.1E-999999999 +1E-999999999   -> 1E-1000000000 Subnormal
subx719 subtract -1E-999999999   -1.1e-999999999 -> 1E-1000000000 Subnormal

precision: 3
subx720 subtract 1  9.999E+999999999   -> -Infinity Inexact Overflow Rounded
subx721 subtract 1 -9.999E+999999999   ->  Infinity Inexact Overflow Rounded
subx722 subtract    9.999E+999999999 1 ->  Infinity Inexact Overflow Rounded
subx723 subtract   -9.999E+999999999 1 -> -Infinity Inexact Overflow Rounded
subx724 subtract 1  9.999E+999999999   -> -Infinity Inexact Overflow Rounded
subx725 subtract 1 -9.999E+999999999   ->  Infinity Inexact Overflow Rounded
subx726 subtract    9.999E+999999999 1 ->  Infinity Inexact Overflow Rounded
subx727 subtract   -9.999E+999999999 1 -> -Infinity Inexact Overflow Rounded

-- [more below]

-- long operand checks
maxexponent: 999
minexponent: -999
precision: 9
sub731 subtract 12345678000 0 ->  1.23456780E+10 Rounded
sub732 subtract 0 12345678000 -> -1.23456780E+10 Rounded
sub733 subtract 1234567800  0 ->  1.23456780E+9 Rounded
sub734 subtract 0 1234567800  -> -1.23456780E+9 Rounded
sub735 subtract 1234567890  0 ->  1.23456789E+9 Rounded
sub736 subtract 0 1234567890  -> -1.23456789E+9 Rounded
sub737 subtract 1234567891  0 ->  1.23456789E+9 Inexact Rounded
sub738 subtract 0 1234567891  -> -1.23456789E+9 Inexact Rounded
sub739 subtract 12345678901 0 ->  1.23456789E+10 Inexact Rounded
sub740 subtract 0 12345678901 -> -1.23456789E+10 Inexact Rounded
sub741 subtract 1234567896  0 ->  1.23456790E+9 Inexact Rounded
sub742 subtract 0 1234567896  -> -1.23456790E+9 Inexact Rounded

precision: 15
sub751 subtract 12345678000 0 ->  12345678000
sub752 subtract 0 12345678000 -> -12345678000
sub753 subtract 1234567800  0 ->  1234567800
sub754 subtract 0 1234567800  -> -1234567800
sub755 subtract 1234567890  0 ->  1234567890
sub756 subtract 0 1234567890  -> -1234567890
sub757 subtract 1234567891  0 ->  1234567891
sub758 subtract 0 1234567891  -> -1234567891
sub759 subtract 12345678901 0 ->  12345678901
sub760 subtract 0 12345678901 -> -12345678901
sub761 subtract 1234567896  0 ->  1234567896
sub762 subtract 0 1234567896  -> -1234567896

-- Specials
subx780 subtract -Inf   Inf   -> -Infinity
subx781 subtract -Inf   1000  -> -Infinity
subx782 subtract -Inf   1     -> -Infinity
subx783 subtract -Inf  -0     -> -Infinity
subx784 subtract -Inf  -1     -> -Infinity
subx785 subtract -Inf  -1000  -> -Infinity
subx787 subtract -1000  Inf   -> -Infinity
subx788 subtract -Inf   Inf   -> -Infinity
subx789 subtract -1     Inf   -> -Infinity
subx790 subtract  0     Inf   -> -Infinity
subx791 subtract  1     Inf   -> -Infinity
subx792 subtract  1000  Inf   -> -Infinity

subx800 subtract  Inf   Inf   ->  NaN  Invalid_operation
subx801 subtract  Inf   1000  ->  Infinity
subx802 subtract  Inf   1     ->  Infinity
subx803 subtract  Inf   0     ->  Infinity
subx804 subtract  Inf  -0     ->  Infinity
subx805 subtract  Inf  -1     ->  Infinity
subx806 subtract  Inf  -1000  ->  Infinity
subx807 subtract  Inf  -Inf   ->  Infinity
subx808 subtract -1000 -Inf   ->  Infinity
subx809 subtract -Inf  -Inf   ->  NaN  Invalid_operation
subx810 subtract -1    -Inf   ->  Infinity
subx811 subtract -0    -Inf   ->  Infinity
subx812 subtract  0    -Inf   ->  Infinity
subx813 subtract  1    -Inf   ->  Infinity
subx814 subtract  1000 -Inf   ->  Infinity
subx815 subtract  Inf  -Inf   ->  Infinity

subx821 subtract  NaN   Inf   ->  NaN
subx822 subtract -NaN   1000  -> -NaN
subx823 subtract  NaN   1     ->  NaN
subx824 subtract  NaN   0     ->  NaN
subx825 subtract  NaN  -0     ->  NaN
subx826 subtract  NaN  -1     ->  NaN
subx827 subtract  NaN  -1000  ->  NaN
subx828 subtract  NaN  -Inf   ->  NaN
subx829 subtract -NaN   NaN   -> -NaN
subx830 subtract -Inf   NaN   ->  NaN
subx831 subtract -1000  NaN   ->  NaN
subx832 subtract -1     NaN   ->  NaN
subx833 subtract -0     NaN   ->  NaN
subx834 subtract  0     NaN   ->  NaN
subx835 subtract  1     NaN   ->  NaN
subx836 subtract  1000 -NaN   -> -NaN
subx837 subtract  Inf   NaN   ->  NaN

subx841 subtract  sNaN  Inf   ->  NaN  Invalid_operation
subx842 subtract -sNaN  1000  -> -NaN  Invalid_operation
subx843 subtract  sNaN  1     ->  NaN  Invalid_operation
subx844 subtract  sNaN  0     ->  NaN  Invalid_operation
subx845 subtract  sNaN -0     ->  NaN  Invalid_operation
subx846 subtract  sNaN -1     ->  NaN  Invalid_operation
subx847 subtract  sNaN -1000  ->  NaN  Invalid_operation
subx848 subtract  sNaN  NaN   ->  NaN  Invalid_operation
subx849 subtract  sNaN sNaN   ->  NaN  Invalid_operation
subx850 subtract  NaN  sNaN   ->  NaN  Invalid_operation
subx851 subtract -Inf -sNaN   -> -NaN  Invalid_operation
subx852 subtract -1000 sNaN   ->  NaN  Invalid_operation
subx853 subtract -1    sNaN   ->  NaN  Invalid_operation
subx854 subtract -0    sNaN   ->  NaN  Invalid_operation
subx855 subtract  0    sNaN   ->  NaN  Invalid_operation
subx856 subtract  1    sNaN   ->  NaN  Invalid_operation
subx857 subtract  1000 sNaN   ->  NaN  Invalid_operation
subx858 subtract  Inf  sNaN   ->  NaN  Invalid_operation
subx859 subtract  NaN  sNaN   ->  NaN  Invalid_operation

-- propagating NaNs
subx861 subtract  NaN01   -Inf     ->  NaN1
subx862 subtract -NaN02   -1000    -> -NaN2
subx863 subtract  NaN03    1000    ->  NaN3
subx864 subtract  NaN04    Inf     ->  NaN4
subx865 subtract  NaN05    NaN61   ->  NaN5
subx866 subtract -Inf     -NaN71   -> -NaN71
subx867 subtract -1000     NaN81   ->  NaN81
subx868 subtract  1000     NaN91   ->  NaN91
subx869 subtract  Inf      NaN101  ->  NaN101
subx871 subtract  sNaN011  -Inf    ->  NaN11  Invalid_operation
subx872 subtract  sNaN012  -1000   ->  NaN12  Invalid_operation
subx873 subtract -sNaN013   1000   -> -NaN13  Invalid_operation
subx874 subtract  sNaN014   NaN171 ->  NaN14  Invalid_operation
subx875 subtract  sNaN015  sNaN181 ->  NaN15  Invalid_operation
subx876 subtract  NaN016   sNaN191 ->  NaN191 Invalid_operation
subx877 subtract -Inf      sNaN201 ->  NaN201 Invalid_operation
subx878 subtract -1000     sNaN211 ->  NaN211 Invalid_operation
subx879 subtract  1000    -sNaN221 -> -NaN221 Invalid_operation
subx880 subtract  Inf      sNaN231 ->  NaN231 Invalid_operation
subx881 subtract  NaN025   sNaN241 ->  NaN241 Invalid_operation

-- edge case spills
subx901 subtract  2.E-3  1.002  -> -1.000
subx902 subtract  2.0E-3  1.002  -> -1.0000
subx903 subtract  2.00E-3  1.0020  -> -1.00000
subx904 subtract  2.000E-3  1.00200  -> -1.000000
subx905 subtract  2.0000E-3  1.002000  -> -1.0000000
subx906 subtract  2.00000E-3  1.0020000  -> -1.00000000
subx907 subtract  2.000000E-3  1.00200000  -> -1.000000000
subx908 subtract  2.0000000E-3  1.002000000  -> -1.0000000000

-- subnormals and underflows
precision: 3
maxexponent: 999
minexponent: -999
subx1010 subtract  0  1.00E-999       ->  -1.00E-999
subx1011 subtract  0  0.1E-999        ->  -1E-1000   Subnormal
subx1012 subtract  0  0.10E-999       ->  -1.0E-1000 Subnormal
subx1013 subtract  0  0.100E-999      ->  -1.0E-1000 Subnormal Rounded
subx1014 subtract  0  0.01E-999       ->  -1E-1001   Subnormal
-- next is rounded to Emin
subx1015 subtract  0  0.999E-999      ->  -1.00E-999 Inexact Rounded Subnormal Underflow
subx1016 subtract  0  0.099E-999      ->  -1.0E-1000 Inexact Rounded Subnormal Underflow
subx1017 subtract  0  0.009E-999      ->  -1E-1001   Inexact Rounded Subnormal Underflow
subx1018 subtract  0  0.001E-999      ->  -0E-1001   Inexact Rounded Subnormal Underflow Clamped
subx1019 subtract  0  0.0009E-999     ->  -0E-1001   Inexact Rounded Subnormal Underflow Clamped
subx1020 subtract  0  0.0001E-999     ->  -0E-1001   Inexact Rounded Subnormal Underflow Clamped

subx1030 subtract  0 -1.00E-999       ->   1.00E-999
subx1031 subtract  0 -0.1E-999        ->   1E-1000   Subnormal
subx1032 subtract  0 -0.10E-999       ->   1.0E-1000 Subnormal
subx1033 subtract  0 -0.100E-999      ->   1.0E-1000 Subnormal Rounded
subx1034 subtract  0 -0.01E-999       ->   1E-1001   Subnormal
-- next is rounded to Emin
subx1035 subtract  0 -0.999E-999      ->   1.00E-999 Inexact Rounded Subnormal Underflow
subx1036 subtract  0 -0.099E-999      ->   1.0E-1000 Inexact Rounded Subnormal Underflow
subx1037 subtract  0 -0.009E-999      ->   1E-1001   Inexact Rounded Subnormal Underflow
subx1038 subtract  0 -0.001E-999      ->   0E-1001   Inexact Rounded Subnormal Underflow Clamped
subx1039 subtract  0 -0.0009E-999     ->   0E-1001   Inexact Rounded Subnormal Underflow Clamped
subx1040 subtract  0 -0.0001E-999     ->   0E-1001   Inexact Rounded Subnormal Underflow Clamped

-- some non-zero subnormal subtracts
-- subx1056 is a tricky case
rounding: half_up
subx1050 subtract  1.00E-999   0.1E-999  ->   9.0E-1000  Subnormal
subx1051 subtract  0.1E-999    0.1E-999  ->   0E-1000
subx1052 subtract  0.10E-999   0.1E-999  ->   0E-1001
subx1053 subtract  0.100E-999  0.1E-999  ->   0E-1001    Clamped
subx1054 subtract  0.01E-999   0.1E-999  ->   -9E-1001   Subnormal
subx1055 subtract  0.999E-999  0.1E-999  ->   9.0E-1000  Inexact Rounded Subnormal Underflow
subx1056 subtract  0.099E-999  0.1E-999  ->   -0E-1001   Inexact Rounded Subnormal Underflow Clamped
subx1057 subtract  0.009E-999  0.1E-999  ->   -9E-1001   Inexact Rounded Subnormal Underflow
subx1058 subtract  0.001E-999  0.1E-999  ->   -1.0E-1000 Inexact Rounded Subnormal Underflow
subx1059 subtract  0.0009E-999 0.1E-999  ->   -1.0E-1000 Inexact Rounded Subnormal Underflow
subx1060 subtract  0.0001E-999 0.1E-999  ->   -1.0E-1000 Inexact Rounded Subnormal Underflow


-- check for double-rounded subnormals
precision:   5
maxexponent: 79
minexponent: -79
subx1101 subtract  0 1.52444E-80 -> -1.524E-80 Inexact Rounded Subnormal Underflow
subx1102 subtract  0 1.52445E-80 -> -1.524E-80 Inexact Rounded Subnormal Underflow
subx1103 subtract  0 1.52446E-80 -> -1.524E-80 Inexact Rounded Subnormal Underflow
subx1104 subtract  1.52444E-80 0 ->  1.524E-80 Inexact Rounded Subnormal Underflow
subx1105 subtract  1.52445E-80 0 ->  1.524E-80 Inexact Rounded Subnormal Underflow
subx1106 subtract  1.52446E-80 0 ->  1.524E-80 Inexact Rounded Subnormal Underflow

subx1111 subtract  1.2345678E-80  1.2345671E-80 ->  0E-83 Inexact Rounded Subnormal Underflow Clamped
subx1112 subtract  1.2345678E-80  1.2345618E-80 ->  0E-83 Inexact Rounded Subnormal Underflow Clamped
subx1113 subtract  1.2345678E-80  1.2345178E-80 ->  0E-83 Inexact Rounded Subnormal Underflow Clamped
subx1114 subtract  1.2345678E-80  1.2341678E-80 ->  0E-83 Inexact Rounded Subnormal Underflow Clamped
subx1115 subtract  1.2345678E-80  1.2315678E-80 ->  3E-83         Rounded Subnormal
subx1116 subtract  1.2345678E-80  1.2145678E-80 ->  2.0E-82       Rounded Subnormal
subx1117 subtract  1.2345678E-80  1.1345678E-80 ->  1.00E-81      Rounded Subnormal
subx1118 subtract  1.2345678E-80  0.2345678E-80 ->  1.000E-80     Rounded Subnormal

precision:   34
rounding:    half_up
maxExponent: 6144
minExponent: -6143
-- Examples from SQL proposal (Krishna Kulkarni)
subx1125  subtract 130E-2  120E-2 -> 0.10
subx1126  subtract 130E-2  12E-1  -> 0.10
subx1127  subtract 130E-2  1E0    -> 0.30
subx1128  subtract 1E2     1E4    -> -9.9E+3

-- Null tests
subx9990 subtract 10  # -> NaN Invalid_operation
subx9991 subtract  # 10 -> NaN Invalid_operation