------------------------------------------------------------------------
-- subtract0.decTest -- decimal subtraction (simplified)              --
-- 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.58

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

-- [first group are 'quick confidence check']
sub001 subtract  0   0  -> '0'
sub002 subtract  1   1  -> '0'
sub003 subtract  1   2  -> '-1'
sub004 subtract  2   1  -> '1'
sub005 subtract  2   2  -> '0'
sub006 subtract  3   2  -> '1'
sub007 subtract  2   3  -> '-1'

sub011 subtract -0   0  -> '0'
sub012 subtract -1   1  -> '-2'
sub013 subtract -1   2  -> '-3'
sub014 subtract -2   1  -> '-3'
sub015 subtract -2   2  -> '-4'
sub016 subtract -3   2  -> '-5'
sub017 subtract -2   3  -> '-5'

sub021 subtract  0  -0  -> '0'
sub022 subtract  1  -1  -> '2'
sub023 subtract  1  -2  -> '3'
sub024 subtract  2  -1  -> '3'
sub025 subtract  2  -2  -> '4'
sub026 subtract  3  -2  -> '5'
sub027 subtract  2  -3  -> '5'

sub030 subtract  11  1  -> 10
sub031 subtract  10  1  ->  9
sub032 subtract  9   1  ->  8
sub033 subtract  1   1  ->  0
sub034 subtract  0   1  -> -1
sub035 subtract -1   1  -> -2
sub036 subtract -9   1  -> -10
sub037 subtract -10  1  -> -11
sub038 subtract -11  1  -> -12

sub040 subtract '5.75' '3.3'  -> '2.45'
sub041 subtract '5'    '-3'   -> '8'
sub042 subtract '-5'   '-3'   -> '-2'
sub043 subtract '-7'   '2.5'  -> '-9.5'
sub044 subtract '0.7'  '0.3'  -> '0.4'
sub045 subtract '1.3'  '0.3'  -> '1.0'
sub046 subtract '1.25' '1.25' -> '0'

sub050 subtract '1.23456789'    '1.00000000' -> '0.23456789'
sub051 subtract '1.23456789'    '1.00000089' -> '0.23456700'
sub052 subtract '0.5555555559'    '0.0000000001' -> '0.555555556' Inexact Lost_digits Rounded
sub053 subtract '0.5555555559'    '0.0000000005' -> '0.555555556' Inexact Lost_digits Rounded
sub054 subtract '0.4444444444'    '0.1111111111' -> '0.333333333' Inexact Lost_digits Rounded
sub055 subtract '1.0000000000'    '0.00000001' -> '0.99999999' Rounded
sub056 subtract '0.4444444444999'    '0' -> '0.444444444' Inexact Lost_digits Rounded
sub057 subtract '0.4444444445000'    '0' -> '0.444444445' Inexact Lost_digits Rounded

sub060 subtract '70'    '10000e+9' -> '-1.00000000E+13' Inexact Rounded
sub061 subtract '700'    '10000e+9' -> '-1.00000000E+13' Inexact Rounded
sub062 subtract '7000'    '10000e+9' -> '-1.00000000E+13' Inexact Rounded
sub063 subtract '70000'    '10000e+9' -> '-9.9999999E+12' Inexact Rounded
sub064 subtract '700000'    '10000e+9' -> '-9.9999993E+12' Rounded
  -- symmetry:
sub065 subtract '10000e+9'    '70' -> '1.00000000E+13' Inexact Rounded
sub066 subtract '10000e+9'    '700' -> '1.00000000E+13' Inexact Rounded
sub067 subtract '10000e+9'    '7000' -> '1.00000000E+13' Inexact Rounded
sub068 subtract '10000e+9'    '70000' -> '9.9999999E+12' Inexact Rounded
sub069 subtract '10000e+9'    '700000' -> '9.9999993E+12' Rounded

  -- change precision
sub080 subtract '10000e+9'    '70000' -> '9.9999999E+12' Inexact Rounded
precision: 6
sub081 subtract '10000e+9'    '70000' -> '1.00000E+13' Inexact Rounded
precision: 9

  -- some of the next group are really constructor tests
sub090 subtract '00.0'    '0.0'  -> '0'
sub091 subtract '00.0'    '0.00' -> '0'
sub092 subtract '0.00'    '00.0' -> '0'
sub093 subtract '00.0'    '0.00' -> '0'
sub094 subtract '0.00'    '00.0' -> '0'
sub095 subtract '3'    '.3'   -> '2.7'
sub096 subtract '3.'   '.3'   -> '2.7'
sub097 subtract '3.0'  '.3'   -> '2.7'
sub098 subtract '3.00' '.3'   -> '2.70'
sub099 subtract '3'    '3'    -> '0'
sub100 subtract '3'    '+3'   -> '0'
sub101 subtract '3'    '-3'   -> '6'
sub102 subtract '3'    '0.3'  -> '2.7'
sub103 subtract '3.'   '0.3'  -> '2.7'
sub104 subtract '3.0'  '0.3'  -> '2.7'
sub105 subtract '3.00' '0.3'  -> '2.70'
sub106 subtract '3'    '3.0'  -> '0'
sub107 subtract '3'    '+3.0' -> '0'
sub108 subtract '3'    '-3.0' -> '6.0'

-- the above all from add; massaged and extended.  Now some new ones...
-- [particularly important for comparisons]
-- NB: -1E-7 below were non-exponents pre-ANSI X3-274
sub120 subtract  '10.23456784'    '10.23456789'  -> '-1E-7' Inexact Lost_digits Rounded
sub121 subtract  '10.23456785'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub122 subtract  '10.23456786'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub123 subtract  '10.23456787'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub124 subtract  '10.23456788'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub125 subtract  '10.23456789'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub126 subtract  '10.23456790'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub127 subtract  '10.23456791'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub128 subtract  '10.23456792'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub129 subtract  '10.23456793'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub130 subtract  '10.23456794'    '10.23456789'  -> 0 Inexact Lost_digits Rounded
sub131 subtract  '10.23456781'    '10.23456786'  -> '-1E-7' Inexact Lost_digits Rounded
sub132 subtract  '10.23456782'    '10.23456786'  -> '-1E-7' Inexact Lost_digits Rounded
sub133 subtract  '10.23456783'    '10.23456786'  -> '-1E-7' Inexact Lost_digits Rounded
sub134 subtract  '10.23456784'    '10.23456786'  -> '-1E-7' Inexact Lost_digits Rounded
sub135 subtract  '10.23456785'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub136 subtract  '10.23456786'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub137 subtract  '10.23456787'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub138 subtract  '10.23456788'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub139 subtract  '10.23456789'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub140 subtract  '10.23456790'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub141 subtract  '10.23456791'    '10.23456786'  -> 0 Inexact Lost_digits Rounded
sub142 subtract  '1'              '0.999999999'  -> 0 Inexact Rounded
sub143 subtract  '0.999999999'    '1'            -> 0 Inexact Rounded


precision: 3
sub150 subtract '12345678900000' '9999999999999'  -> 2.3E+12 Inexact Lost_digits Rounded
sub151 subtract '9999999999999'  '12345678900000' -> -2.3E+12 Inexact Lost_digits Rounded
precision: 6
sub152 subtract '12345678900000' '9999999999999'  -> 2.3457E+12 Inexact Lost_digits Rounded
sub153 subtract '9999999999999'  '12345678900000' -> -2.3457E+12 Inexact Lost_digits Rounded
precision: 9
sub154 subtract '12345678900000' '9999999999999'  -> 2.3456789E+12 Inexact Lost_digits Rounded
sub155 subtract '9999999999999'  '12345678900000' -> -2.3456789E+12 Inexact Lost_digits Rounded
precision: 12
sub156 subtract '12345678900000' '9999999999999'  -> 2.3456789000E+12 Inexact Lost_digits Rounded
sub157 subtract '9999999999999'  '12345678900000' -> -2.3456789000E+12 Inexact Lost_digits Rounded
precision: 15
sub158 subtract '12345678900000' '9999999999999'  -> 2345678900001
sub159 subtract '9999999999999'  '12345678900000' -> -2345678900001
precision: 9

-- additional scaled arithmetic tests [0.97 problem]
sub160 subtract '0'     '.1'      -> '-0.1'
sub161 subtract '00'    '.97983'  -> '-0.97983'
sub162 subtract '0'     '.9'      -> '-0.9'
sub163 subtract '0'     '0.102'   -> '-0.102'
sub164 subtract '0'     '.4'      -> '-0.4'
sub165 subtract '0'     '.307'    -> '-0.307'
sub166 subtract '0'     '.43822'  -> '-0.43822'
sub167 subtract '0'     '.911'    -> '-0.911'
sub168 subtract '.0'    '.02'     -> '-0.02'
sub169 subtract '00'    '.392'    -> '-0.392'
sub170 subtract '0'     '.26'     -> '-0.26'
sub171 subtract '0'     '0.51'    -> '-0.51'
sub172 subtract '0'     '.2234'   -> '-0.2234'
sub173 subtract '0'     '.2'      -> '-0.2'
sub174 subtract '.0'    '.0008'   -> '-0.0008'
-- 0. on left
sub180 subtract '0.0'     '-.1'      -> '0.1'
sub181 subtract '0.00'    '-.97983'  -> '0.97983'
sub182 subtract '0.0'     '-.9'      -> '0.9'
sub183 subtract '0.0'     '-0.102'   -> '0.102'
sub184 subtract '0.0'     '-.4'      -> '0.4'
sub185 subtract '0.0'     '-.307'    -> '0.307'
sub186 subtract '0.0'     '-.43822'  -> '0.43822'
sub187 subtract '0.0'     '-.911'    -> '0.911'
sub188 subtract '0.0'     '-.02'     -> '0.02'
sub189 subtract '0.00'    '-.392'    -> '0.392'
sub190 subtract '0.0'     '-.26'     -> '0.26'
sub191 subtract '0.0'     '-0.51'    -> '0.51'
sub192 subtract '0.0'     '-.2234'   -> '0.2234'
sub193 subtract '0.0'     '-.2'      -> '0.2'
sub194 subtract '0.0'     '-.0008'   -> '0.0008'
-- negatives of same
sub200 subtract '0'     '-.1'      -> '0.1'
sub201 subtract '00'    '-.97983'  -> '0.97983'
sub202 subtract '0'     '-.9'      -> '0.9'
sub203 subtract '0'     '-0.102'   -> '0.102'
sub204 subtract '0'     '-.4'      -> '0.4'
sub205 subtract '0'     '-.307'    -> '0.307'
sub206 subtract '0'     '-.43822'  -> '0.43822'
sub207 subtract '0'     '-.911'    -> '0.911'
sub208 subtract '.0'    '-.02'     -> '0.02'
sub209 subtract '00'    '-.392'    -> '0.392'
sub210 subtract '0'     '-.26'     -> '0.26'
sub211 subtract '0'     '-0.51'    -> '0.51'
sub212 subtract '0'     '-.2234'   -> '0.2234'
sub213 subtract '0'     '-.2'      -> '0.2'
sub214 subtract '.0'    '-.0008'   -> '0.0008'

-- more fixed, LHS swaps [really the same as testcases under add]
sub220 subtract '-56267E-12' 0  -> '-5.6267E-8'
sub221 subtract '-56267E-11' 0  -> '-5.6267E-7'
sub222 subtract '-56267E-10' 0  -> '-0.0000056267'
sub223 subtract '-56267E-9'  0  -> '-0.000056267'
sub224 subtract '-56267E-8'  0  -> '-0.00056267'
sub225 subtract '-56267E-7'  0  -> '-0.0056267'
sub226 subtract '-56267E-6'  0  -> '-0.056267'
sub227 subtract '-56267E-5'  0  -> '-0.56267'
sub228 subtract '-56267E-2'  0  -> '-562.67'
sub229 subtract '-56267E-1'  0  -> '-5626.7'
sub230 subtract '-56267E-0'  0  -> '-56267'
-- symmetry ...
sub240 subtract 0 '-56267E-12'  -> '5.6267E-8'
sub241 subtract 0 '-56267E-11'  -> '5.6267E-7'
sub242 subtract 0 '-56267E-10'  -> '0.0000056267'
sub243 subtract 0 '-56267E-9'   -> '0.000056267'
sub244 subtract 0 '-56267E-8'   -> '0.00056267'
sub245 subtract 0 '-56267E-7'   -> '0.0056267'
sub246 subtract 0 '-56267E-6'   -> '0.056267'
sub247 subtract 0 '-56267E-5'   -> '0.56267'
sub248 subtract 0 '-56267E-2'   -> '562.67'
sub249 subtract 0 '-56267E-1'   -> '5626.7'
sub250 subtract 0 '-56267E-0'   -> '56267'

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

sub311 subtract '0.4444444444'  '0.5555555555' -> '-0.111111112' Inexact Lost_digits Rounded
sub312 subtract '0.4444444440'  '0.5555555555' -> '-0.111111112' Inexact Lost_digits Rounded
sub313 subtract '0.4444444444'  '0.5555555550' -> '-0.111111111' Inexact Lost_digits Rounded
sub314 subtract '0.44444444449'    '0' -> '0.444444444' Inexact Lost_digits Rounded
sub315 subtract '0.444444444499'   '0' -> '0.444444444' Inexact Lost_digits Rounded
sub316 subtract '0.4444444444999'  '0' -> '0.444444444' Inexact Lost_digits Rounded
sub317 subtract '0.4444444445000'  '0' -> '0.444444445' Inexact Lost_digits Rounded
sub318 subtract '0.4444444445001'  '0' -> '0.444444445' Inexact Lost_digits Rounded
sub319 subtract '0.444444444501'   '0' -> '0.444444445' Inexact Lost_digits Rounded
sub320 subtract '0.44444444451'    '0' -> '0.444444445' Inexact Lost_digits Rounded

-- some carrying effects
sub321 subtract '0.9998'  '0.0000' -> '0.9998'
sub322 subtract '0.9998'  '0.0001' -> '0.9997'
sub323 subtract '0.9998'  '0.0002' -> '0.9996'
sub324 subtract '0.9998'  '0.0003' -> '0.9995'
sub325 subtract '0.9998'  '-0.0000' -> '0.9998'
sub326 subtract '0.9998'  '-0.0001' -> '0.9999'
sub327 subtract '0.9998'  '-0.0002' -> '1.0000'
sub328 subtract '0.9998'  '-0.0003' -> '1.0001'

sub330 subtract '70'  '10000e+9' -> '-1.00000000E+13' Inexact Rounded
sub331 subtract '700'  '10000e+9' -> '-1.00000000E+13' Inexact Rounded
sub332 subtract '7000'  '10000e+9' -> '-1.00000000E+13' Inexact Rounded
sub333 subtract '70000'  '10000e+9' -> '-9.9999999E+12' Inexact Rounded
sub334 subtract '700000'  '10000e+9' -> '-9.9999993E+12' Rounded
sub335 subtract '7000000'  '10000e+9' -> '-9.9999930E+12' Rounded
-- symmetry:
sub340 subtract '10000e+9'  '70' -> '1.00000000E+13' Inexact Rounded
sub341 subtract '10000e+9'  '700' -> '1.00000000E+13' Inexact Rounded
sub342 subtract '10000e+9'  '7000' -> '1.00000000E+13' Inexact Rounded
sub343 subtract '10000e+9'  '70000' -> '9.9999999E+12' Inexact Rounded
sub344 subtract '10000e+9'  '700000' -> '9.9999993E+12' Rounded
sub345 subtract '10000e+9'  '7000000' -> '9.9999930E+12' Rounded

-- same, higher precision
precision: 15
sub346 subtract '10000e+9'  '7' -> '9999999999993'
sub347 subtract '10000e+9'  '70' -> '9999999999930'
sub348 subtract '10000e+9'  '700' -> '9999999999300'
sub349 subtract '10000e+9'  '7000' -> '9999999993000'
sub350 subtract '10000e+9'  '70000' -> '9999999930000'
sub351 subtract '10000e+9'  '700000' -> '9999999300000'
sub352 subtract '7' '10000e+9'   -> '-9999999999993'
sub353 subtract '70' '10000e+9'   -> '-9999999999930'
sub354 subtract '700' '10000e+9'   -> '-9999999999300'
sub355 subtract '7000' '10000e+9'   -> '-9999999993000'
sub356 subtract '70000' '10000e+9'   -> '-9999999930000'
sub357 subtract '700000' '10000e+9'   -> '-9999999300000'

-- zero preservation
precision: 6
sub360 subtract '10000e+9'  '70000' -> '1.00000E+13' Inexact Rounded
sub361 subtract 1 '0.0001' -> '0.9999'
sub362 subtract 1 '0.00001' -> '0.99999'
sub363 subtract 1 '0.000001' -> '1.00000' Inexact Rounded
sub364 subtract 1 '0.0000001' -> '1.00000' Inexact Rounded
sub365 subtract 1 '0.00000001' -> '1.00000' Inexact Rounded

-- some funny zeros [in case of bad signum]
sub370 subtract 1  0  -> 1
sub371 subtract 1 0.  -> 1
sub372 subtract 1  .0 -> 1
sub373 subtract 1 0.0 -> 1
sub374 subtract  0  1 -> -1
sub375 subtract 0.  1 -> -1
sub376 subtract  .0 1 -> -1
sub377 subtract 0.0 1 -> -1

precision: 9

-- leading 0 digit before round
sub910 subtract -103519362 -51897955.3 -> -51621407 Inexact Rounded
sub911 subtract 159579.444 89827.5229 -> 69751.921 Inexact Rounded

sub920 subtract 333.123456 33.1234566 -> 299.999999 Inexact Rounded
sub921 subtract 333.123456 33.1234565 -> 300.000000 Inexact Rounded
sub922 subtract 133.123456 33.1234565 -> 100.000000 Inexact Rounded
sub923 subtract 133.123456 33.1234564 -> 100.000000 Inexact Rounded
sub924 subtract 133.123456 33.1234540 -> 100.000002 Rounded
sub925 subtract 133.123456 43.1234560 ->  90.000000 Rounded
sub926 subtract 133.123456 43.1234561 ->  90.000000 Inexact Rounded
sub927 subtract 133.123456 43.1234566 ->  89.999999 Inexact Rounded
sub928 subtract 101.123456 91.1234566 ->   9.999999 Inexact Rounded
sub929 subtract 101.123456 99.1234566 ->   1.999999 Inexact Rounded

-- more of the same; probe for cluster boundary problems
precision: 1
sub930 subtract  11 2           -> 1E+1 Inexact Lost_digits Rounded
precision: 2
sub932 subtract 101 2           -> 1.0E+2 Inexact Lost_digits Rounded
precision: 3
sub934 subtract 101 2.1         -> 99 Inexact Rounded
sub935 subtract 101 92.01       ->  9 Inexact Lost_digits Rounded
precision: 4
sub936 subtract 101 2.01        -> 99.0 Inexact Rounded
sub937 subtract 101 92.01       ->  9.0 Inexact Rounded
precision: 5
sub938 subtract 101 2.001       -> 99.00 Inexact Rounded
sub939 subtract 101 92.001      ->  9.00 Inexact Rounded
precision: 6
sub940 subtract 101 2.0001      -> 99.000 Inexact Rounded
sub941 subtract 101 92.0001     ->  9.000 Inexact Rounded
precision: 7
sub942 subtract 101 2.00001     -> 99.0000 Inexact Rounded
sub943 subtract 101 92.00001    ->  9.0000 Inexact Rounded
precision: 8
sub944 subtract 101 2.000001    -> 99.00000 Inexact Rounded
sub945 subtract 101 92.000001   ->  9.00000 Inexact Rounded
precision: 9
sub946 subtract 101 2.0000001   -> 99.000000 Inexact Rounded
sub947 subtract 101 92.0000001  ->  9.000000 Inexact Rounded

precision: 9

-- more LHS swaps [were fixed]
sub390 subtract '-56267E-10'   0 ->  '-0.0000056267'
sub391 subtract '-56267E-6'    0 ->  '-0.056267'
sub392 subtract '-56267E-5'    0 ->  '-0.56267'
sub393 subtract '-56267E-4'    0 ->  '-5.6267'
sub394 subtract '-56267E-3'    0 ->  '-56.267'
sub395 subtract '-56267E-2'    0 ->  '-562.67'
sub396 subtract '-56267E-1'    0 ->  '-5626.7'
sub397 subtract '-56267E-0'    0 ->  '-56267'
sub398 subtract '-5E-10'       0 ->  '-5E-10'
sub399 subtract '-5E-7'        0 ->  '-5E-7'
sub400 subtract '-5E-6'        0 ->  '-0.000005'
sub401 subtract '-5E-5'        0 ->  '-0.00005'
sub402 subtract '-5E-4'        0 ->  '-0.0005'
sub403 subtract '-5E-1'        0 ->  '-0.5'
sub404 subtract '-5E0'         0 ->  '-5'
sub405 subtract '-5E1'         0 ->  '-50'
sub406 subtract '-5E5'         0 ->  '-500000'
sub407 subtract '-5E8'         0 ->  '-500000000'
sub408 subtract '-5E9'         0 ->  '-5E+9'
sub409 subtract '-5E10'        0 ->  '-5E+10'
sub410 subtract '-5E11'        0 ->  '-5E+11'
sub411 subtract '-5E100'       0 ->  '-5E+100'

-- more RHS swaps [were fixed]
sub420 subtract 0  '-56267E-10' ->  '0.0000056267'
sub421 subtract 0  '-56267E-6'  ->  '0.056267'
sub422 subtract 0  '-56267E-5'  ->  '0.56267'
sub423 subtract 0  '-56267E-4'  ->  '5.6267'
sub424 subtract 0  '-56267E-3'  ->  '56.267'
sub425 subtract 0  '-56267E-2'  ->  '562.67'
sub426 subtract 0  '-56267E-1'  ->  '5626.7'
sub427 subtract 0  '-56267E-0'  ->  '56267'
sub428 subtract 0  '-5E-10'     ->  '5E-10'
sub429 subtract 0  '-5E-7'      ->  '5E-7'
sub430 subtract 0  '-5E-6'      ->  '0.000005'
sub431 subtract 0  '-5E-5'      ->  '0.00005'
sub432 subtract 0  '-5E-4'      ->  '0.0005'
sub433 subtract 0  '-5E-1'      ->  '0.5'
sub434 subtract 0  '-5E0'       ->  '5'
sub435 subtract 0  '-5E1'       ->  '50'
sub436 subtract 0  '-5E5'       ->  '500000'
sub437 subtract 0  '-5E8'       ->  '500000000'
sub438 subtract 0  '-5E9'       ->  '5E+9'
sub439 subtract 0  '-5E10'      ->  '5E+10'
sub440 subtract 0  '-5E11'      ->  '5E+11'
sub441 subtract 0  '-5E100'     ->  '5E+100'


-- try borderline precision, with carries, etc.
precision: 15
sub461 subtract '1E+12' '1'       -> '999999999999'
sub462 subtract '1E+12' '-1.11'   -> '1000000000001.11'
sub463 subtract '1.11'  '-1E+12'  -> '1000000000001.11'
sub464 subtract '-1'    '-1E+12'  -> '999999999999'
sub465 subtract '7E+12' '1'       -> '6999999999999'
sub466 subtract '7E+12' '-1.11'   -> '7000000000001.11'
sub467 subtract '1.11'  '-7E+12'  -> '7000000000001.11'
sub468 subtract '-1'    '-7E+12'  -> '6999999999999'

--                 123456789012345       123456789012345      1 23456789012345
sub470 subtract '0.444444444444444'  '-0.555555555555563' -> '1.00000000000001' Inexact Rounded
sub471 subtract '0.444444444444444'  '-0.555555555555562' -> '1.00000000000001' Inexact Rounded
sub472 subtract '0.444444444444444'  '-0.555555555555561' -> '1.00000000000001' Inexact Rounded
sub473 subtract '0.444444444444444'  '-0.555555555555560' -> '1.00000000000000' Inexact Rounded
sub474 subtract '0.444444444444444'  '-0.555555555555559' -> '1.00000000000000' Inexact Rounded
sub475 subtract '0.444444444444444'  '-0.555555555555558' -> '1.00000000000000' Inexact Rounded
sub476 subtract '0.444444444444444'  '-0.555555555555557' -> '1.00000000000000' Inexact Rounded
sub477 subtract '0.444444444444444'  '-0.555555555555556' -> '1.00000000000000' Rounded
sub478 subtract '0.444444444444444'  '-0.555555555555555' -> '0.999999999999999'
sub479 subtract '0.444444444444444'  '-0.555555555555554' -> '0.999999999999998'
sub480 subtract '0.444444444444444'  '-0.555555555555553' -> '0.999999999999997'
sub481 subtract '0.444444444444444'  '-0.555555555555552' -> '0.999999999999996'
sub482 subtract '0.444444444444444'  '-0.555555555555551' -> '0.999999999999995'
sub483 subtract '0.444444444444444'  '-0.555555555555550' -> '0.999999999999994'

-- and some more, including residue effects and different roundings
precision: 9
rounding: half_up
sub500 subtract '123456789' 0             -> '123456789'
sub501 subtract '123456789' 0.000000001   -> '123456789' Inexact Rounded
sub502 subtract '123456789' 0.000001      -> '123456789' Inexact Rounded
sub503 subtract '123456789' 0.1           -> '123456789' Inexact Rounded
sub504 subtract '123456789' 0.4           -> '123456789' Inexact Rounded
sub505 subtract '123456789' 0.49          -> '123456789' Inexact Rounded
sub506 subtract '123456789' 0.499999      -> '123456789' Inexact Rounded
sub507 subtract '123456789' 0.499999999   -> '123456789' Inexact Rounded
sub508 subtract '123456789' 0.5           -> '123456789' Inexact Rounded
sub509 subtract '123456789' 0.500000001   -> '123456788' Inexact Rounded
sub510 subtract '123456789' 0.500001      -> '123456788' Inexact Rounded
sub511 subtract '123456789' 0.51          -> '123456788' Inexact Rounded
sub512 subtract '123456789' 0.6           -> '123456788' Inexact Rounded
sub513 subtract '123456789' 0.9           -> '123456788' Inexact Rounded
sub514 subtract '123456789' 0.99999       -> '123456788' Inexact Rounded
sub515 subtract '123456789' 0.999999999   -> '123456788' Inexact Rounded
sub516 subtract '123456789' 1             -> '123456788'
sub517 subtract '123456789' 1.000000001   -> '123456788' Inexact Lost_digits Rounded
sub518 subtract '123456789' 1.00001       -> '123456788' Inexact Rounded
sub519 subtract '123456789' 1.1           -> '123456788' Inexact Rounded

rounding: half_even
sub520 subtract '123456789' 0             -> '123456789'
sub521 subtract '123456789' 0.000000001   -> '123456789' Inexact Rounded
sub522 subtract '123456789' 0.000001      -> '123456789' Inexact Rounded
sub523 subtract '123456789' 0.1           -> '123456789' Inexact Rounded
sub524 subtract '123456789' 0.4           -> '123456789' Inexact Rounded
sub525 subtract '123456789' 0.49          -> '123456789' Inexact Rounded
sub526 subtract '123456789' 0.499999      -> '123456789' Inexact Rounded
sub527 subtract '123456789' 0.499999999   -> '123456789' Inexact Rounded
sub528 subtract '123456789' 0.5           -> '123456788' Inexact Rounded
sub529 subtract '123456789' 0.500000001   -> '123456788' Inexact Rounded
sub530 subtract '123456789' 0.500001      -> '123456788' Inexact Rounded
sub531 subtract '123456789' 0.51          -> '123456788' Inexact Rounded
sub532 subtract '123456789' 0.6           -> '123456788' Inexact Rounded
sub533 subtract '123456789' 0.9           -> '123456788' Inexact Rounded
sub534 subtract '123456789' 0.99999       -> '123456788' Inexact Rounded
sub535 subtract '123456789' 0.999999999   -> '123456788' Inexact Rounded
sub536 subtract '123456789' 1             -> '123456788'
sub537 subtract '123456789' 1.00000001    -> '123456788' Inexact Rounded
sub538 subtract '123456789' 1.00001       -> '123456788' Inexact Rounded
sub539 subtract '123456789' 1.1           -> '123456788' Inexact Rounded
-- critical few with even bottom digit...
sub540 subtract '123456788' 0.499999999   -> '123456788' Inexact Rounded
sub541 subtract '123456788' 0.5           -> '123456788' Inexact Rounded
sub542 subtract '123456788' 0.500000001   -> '123456787' Inexact Rounded

rounding: down
sub550 subtract '123456789' 0             -> '123456789'
sub551 subtract '123456789' 0.000000001   -> '123456788' Inexact Rounded
sub552 subtract '123456789' 0.000001      -> '123456788' Inexact Rounded
sub553 subtract '123456789' 0.1           -> '123456788' Inexact Rounded
sub554 subtract '123456789' 0.4           -> '123456788' Inexact Rounded
sub555 subtract '123456789' 0.49          -> '123456788' Inexact Rounded
sub556 subtract '123456789' 0.499999      -> '123456788' Inexact Rounded
sub557 subtract '123456789' 0.499999999   -> '123456788' Inexact Rounded
sub558 subtract '123456789' 0.5           -> '123456788' Inexact Rounded
sub559 subtract '123456789' 0.500000001   -> '123456788' Inexact Rounded
sub560 subtract '123456789' 0.500001      -> '123456788' Inexact Rounded
sub561 subtract '123456789' 0.51          -> '123456788' Inexact Rounded
sub562 subtract '123456789' 0.6           -> '123456788' Inexact Rounded
sub563 subtract '123456789' 0.9           -> '123456788' Inexact Rounded
sub564 subtract '123456789' 0.99999       -> '123456788' Inexact Rounded
sub565 subtract '123456789' 0.999999999   -> '123456788' Inexact Rounded
sub566 subtract '123456789' 1             -> '123456788'
sub567 subtract '123456789' 1.00000001    -> '123456787' Inexact Rounded
sub568 subtract '123456789' 1.00001       -> '123456787' Inexact Rounded
sub569 subtract '123456789' 1.1           -> '123456787' Inexact Rounded

-- symmetry...
rounding: half_up
sub600 subtract 0             '123456789' -> '-123456789'
sub601 subtract 0.000000001   '123456789' -> '-123456789' Inexact Rounded
sub602 subtract 0.000001      '123456789' -> '-123456789' Inexact Rounded
sub603 subtract 0.1           '123456789' -> '-123456789' Inexact Rounded
sub604 subtract 0.4           '123456789' -> '-123456789' Inexact Rounded
sub605 subtract 0.49          '123456789' -> '-123456789' Inexact Rounded
sub606 subtract 0.499999      '123456789' -> '-123456789' Inexact Rounded
sub607 subtract 0.499999999   '123456789' -> '-123456789' Inexact Rounded
sub608 subtract 0.5           '123456789' -> '-123456789' Inexact Rounded
sub609 subtract 0.500000001   '123456789' -> '-123456788' Inexact Rounded
sub610 subtract 0.500001      '123456789' -> '-123456788' Inexact Rounded
sub611 subtract 0.51          '123456789' -> '-123456788' Inexact Rounded
sub612 subtract 0.6           '123456789' -> '-123456788' Inexact Rounded
sub613 subtract 0.9           '123456789' -> '-123456788' Inexact Rounded
sub614 subtract 0.99999       '123456789' -> '-123456788' Inexact Rounded
sub615 subtract 0.999999999   '123456789' -> '-123456788' Inexact Rounded
sub616 subtract 1             '123456789' -> '-123456788'
sub617 subtract 1.000000001   '123456789' -> '-123456788' Inexact Lost_digits Rounded
sub618 subtract 1.00001       '123456789' -> '-123456788' Inexact Rounded
sub619 subtract 1.1           '123456789' -> '-123456788' Inexact Rounded

rounding: half_even
sub620 subtract 0             '123456789' -> '-123456789'
sub621 subtract 0.000000001   '123456789' -> '-123456789' Inexact Rounded
sub622 subtract 0.000001      '123456789' -> '-123456789' Inexact Rounded
sub623 subtract 0.1           '123456789' -> '-123456789' Inexact Rounded
sub624 subtract 0.4           '123456789' -> '-123456789' Inexact Rounded
sub625 subtract 0.49          '123456789' -> '-123456789' Inexact Rounded
sub626 subtract 0.499999      '123456789' -> '-123456789' Inexact Rounded
sub627 subtract 0.499999999   '123456789' -> '-123456789' Inexact Rounded
sub628 subtract 0.5           '123456789' -> '-123456788' Inexact Rounded
sub629 subtract 0.500000001   '123456789' -> '-123456788' Inexact Rounded
sub630 subtract 0.500001      '123456789' -> '-123456788' Inexact Rounded
sub631 subtract 0.51          '123456789' -> '-123456788' Inexact Rounded
sub632 subtract 0.6           '123456789' -> '-123456788' Inexact Rounded
sub633 subtract 0.9           '123456789' -> '-123456788' Inexact Rounded
sub634 subtract 0.99999       '123456789' -> '-123456788' Inexact Rounded
sub635 subtract 0.999999999   '123456789' -> '-123456788' Inexact Rounded
sub636 subtract 1             '123456789' -> '-123456788'
sub637 subtract 1.00000001    '123456789' -> '-123456788' Inexact Rounded
sub638 subtract 1.00001       '123456789' -> '-123456788' Inexact Rounded
sub639 subtract 1.1           '123456789' -> '-123456788' Inexact Rounded
-- critical few with even bottom digit...
sub640 subtract 0.499999999   '123456788' -> '-123456788' Inexact Rounded
sub641 subtract 0.5           '123456788' -> '-123456788' Inexact Rounded
sub642 subtract 0.500000001   '123456788' -> '-123456787' Inexact Rounded

rounding: down
sub650 subtract 0             '123456789' -> '-123456789'
sub651 subtract 0.000000001   '123456789' -> '-123456788' Inexact Rounded
sub652 subtract 0.000001      '123456789' -> '-123456788' Inexact Rounded
sub653 subtract 0.1           '123456789' -> '-123456788' Inexact Rounded
sub654 subtract 0.4           '123456789' -> '-123456788' Inexact Rounded
sub655 subtract 0.49          '123456789' -> '-123456788' Inexact Rounded
sub656 subtract 0.499999      '123456789' -> '-123456788' Inexact Rounded
sub657 subtract 0.499999999   '123456789' -> '-123456788' Inexact Rounded
sub658 subtract 0.5           '123456789' -> '-123456788' Inexact Rounded
sub659 subtract 0.500000001   '123456789' -> '-123456788' Inexact Rounded
sub660 subtract 0.500001      '123456789' -> '-123456788' Inexact Rounded
sub661 subtract 0.51          '123456789' -> '-123456788' Inexact Rounded
sub662 subtract 0.6           '123456789' -> '-123456788' Inexact Rounded
sub663 subtract 0.9           '123456789' -> '-123456788' Inexact Rounded
sub664 subtract 0.99999       '123456789' -> '-123456788' Inexact Rounded
sub665 subtract 0.999999999   '123456789' -> '-123456788' Inexact Rounded
sub666 subtract 1             '123456789' -> '-123456788'
sub667 subtract 1.00000001    '123456789' -> '-123456787' Inexact Rounded
sub668 subtract 1.00001       '123456789' -> '-123456787' Inexact Rounded
sub669 subtract 1.1           '123456789' -> '-123456787' Inexact Rounded

-- lots of leading zeros in intermediate result, and showing effects of
-- input rounding
precision: 9
rounding: half_up
sub670 subtract '123456789' '123456788.1' -> 1 Inexact Lost_digits Rounded
sub671 subtract '123456789' '123456788.9' -> 0 Inexact Lost_digits Rounded
sub672 subtract '123456789' '123456789.1' -> 0 Inexact Lost_digits Rounded
sub673 subtract '123456789' '123456789.5' -> -1 Inexact Lost_digits Rounded
sub674 subtract '123456789' '123456789.9' -> -1 Inexact Lost_digits Rounded

rounding: half_even
sub680 subtract '123456789' '123456788.1' -> 1 Inexact Lost_digits Rounded
sub681 subtract '123456789' '123456788.9' -> 0 Inexact Lost_digits Rounded
sub682 subtract '123456789' '123456789.1' -> 0 Inexact Lost_digits Rounded
sub683 subtract '123456789' '123456789.5' -> -1 Inexact Lost_digits Rounded
sub684 subtract '123456789' '123456789.9' -> -1 Inexact Lost_digits Rounded

sub685 subtract '123456788' '123456787.1' -> 1 Inexact Lost_digits Rounded
sub686 subtract '123456788' '123456787.9' -> 0 Inexact Lost_digits Rounded
sub687 subtract '123456788' '123456788.1' -> 0 Inexact Lost_digits Rounded
sub688 subtract '123456788' '123456788.5' -> 0 Inexact Lost_digits Rounded
sub689 subtract '123456788' '123456788.9' -> -1 Inexact Lost_digits Rounded

rounding: down
sub690 subtract '123456789' '123456788.1' -> 1 Inexact Lost_digits Rounded
sub691 subtract '123456789' '123456788.9' -> 1 Inexact Lost_digits Rounded
sub692 subtract '123456789' '123456789.1' -> 0 Inexact Lost_digits Rounded
sub693 subtract '123456789' '123456789.5' -> 0 Inexact Lost_digits Rounded
sub694 subtract '123456789' '123456789.9' -> 0 Inexact Lost_digits Rounded


-- input preparation tests
rounding: half_up
precision: 3

sub700 subtract '12345678900000'  -9999999999999 ->  '2.23E+13' Inexact Lost_digits Rounded
sub701 subtract  '9999999999999' -12345678900000 ->  '2.23E+13' Inexact Lost_digits Rounded
sub702 subtract '12E+3'  '-3456' ->  '1.55E+4' Inexact Lost_digits Rounded
-- next was 1.54E+4 under old [truncate to digits+1] rules
sub703 subtract '12E+3'  '-3446' ->  '1.55E+4' Inexact Lost_digits Rounded
sub704 subtract '12E+3'  '-3454' ->  '1.55E+4' Inexact Lost_digits Rounded
sub705 subtract '12E+3'  '-3444' ->  '1.54E+4' Inexact Lost_digits Rounded

sub706 subtract '3456'  '-12E+3' ->  '1.55E+4' Inexact Lost_digits Rounded
-- next was 1.54E+4 under old [truncate to digits+1] rules
sub707 subtract '3446'  '-12E+3' ->  '1.55E+4' Inexact Lost_digits Rounded
sub708 subtract '3454'  '-12E+3' ->  '1.55E+4' Inexact Lost_digits Rounded
sub709 subtract '3444'  '-12E+3' ->  '1.54E+4' Inexact Lost_digits Rounded

-- overflow and underflow tests
maxexponent: 999999999
minexponent: -999999999
sub730 subtract 1E+999999999    -9E+999999999   -> ? Overflow Inexact Rounded
sub731 subtract 9E+999999999    -1E+999999999   -> ? Overflow Inexact Rounded
sub732 subtract -1.1E-999999999 -1E-999999999   -> ? Underflow Subnormal Inexact Rounded
sub733 subtract 1E-999999999     1.1e-999999999 -> ? Underflow Subnormal Inexact Rounded
sub734 subtract -1E+999999999    9E+999999999   -> ? Overflow Inexact Rounded
sub735 subtract -9E+999999999    1E+999999999   -> ? Overflow Inexact Rounded
sub736 subtract +1.1E-999999999  1E-999999999   -> ? Underflow Subnormal Inexact Rounded
sub737 subtract -1E-999999999   -1.1e-999999999 -> ? Underflow Subnormal Inexact Rounded

-- lostDigits checks
maxexponent: 999
minexponent: -999
precision: 9
sub801 subtract 12345678000 0 ->  1.23456780E+10 Rounded
sub802 subtract 0 12345678000 -> -1.23456780E+10 Rounded
sub803 subtract 1234567800  0 ->  1.23456780E+9 Rounded
sub804 subtract 0 1234567800  -> -1.23456780E+9 Rounded
sub805 subtract 1234567890  0 ->  1.23456789E+9 Rounded
sub806 subtract 0 1234567890  -> -1.23456789E+9 Rounded
sub807 subtract 1234567891  0 ->  1.23456789E+9 Inexact Lost_digits Rounded
sub808 subtract 0 1234567891  -> -1.23456789E+9 Inexact Lost_digits Rounded
sub809 subtract 12345678901 0 ->  1.23456789E+10 Inexact Lost_digits Rounded
sub810 subtract 0 12345678901 -> -1.23456789E+10 Inexact Lost_digits Rounded
sub811 subtract 1234567896  0 ->  1.23456790E+9 Inexact Lost_digits Rounded
sub812 subtract 0 1234567896  -> -1.23456790E+9 Inexact Lost_digits Rounded

precision: 15
-- still checking for [no] lostDigits
sub841 subtract 12345678000 0 ->  12345678000
sub842 subtract 0 12345678000 -> -12345678000
sub843 subtract 1234567800  0 ->  1234567800
sub844 subtract 0 1234567800  -> -1234567800
sub845 subtract 1234567890  0 ->  1234567890
sub846 subtract 0 1234567890  -> -1234567890
sub847 subtract 1234567891  0 ->  1234567891
sub848 subtract 0 1234567891  -> -1234567891
sub849 subtract 12345678901 0 ->  12345678901
sub850 subtract 0 12345678901 -> -12345678901
sub851 subtract 1234567896  0 ->  1234567896
sub852 subtract 0 1234567896  -> -1234567896

-- Null tests
sub900 subtract 10  # -> ? Invalid_operation
sub901 subtract  # 10 -> ? Invalid_operation