clamp.decTest 10.8 KB
Newer Older
1 2
------------------------------------------------------------------------
-- clamp.decTest -- clamped exponent tests (format-independent)       --
3
-- Copyright (c) IBM Corporation, 2000, 2008.  All rights reserved.   --
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
------------------------------------------------------------------------
-- 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                                                   --
------------------------------------------------------------------------
20
version: 2.59
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

-- This set of tests uses the same limits as the 8-byte concrete
-- representation, but applies clamping without using format-specific
-- conversions.

extended:    1
precision:   16
rounding:    half_even
maxExponent: 384
minExponent: -383
clamp:       1

-- General testcases

-- Normality
clam010 apply   1234567890123456   ->  1234567890123456
clam011 apply   1234567890123456.0 ->  1234567890123456 Rounded
clam012 apply   1234567890123456.1 ->  1234567890123456 Rounded Inexact
clam013 apply  -1234567890123456   -> -1234567890123456
clam014 apply  -1234567890123456.0 -> -1234567890123456 Rounded
clam015 apply  -1234567890123456.1 -> -1234567890123456 Rounded Inexact


-- Nmax and similar
clam022 apply   9.999999999999999E+384  -> 9.999999999999999E+384
clam024 apply   1.234567890123456E+384  -> 1.234567890123456E+384
-- fold-downs (more below)
clam030 apply   1.23E+384               -> 1.230000000000000E+384 Clamped
clam032 apply   1E+384                  -> 1.000000000000000E+384 Clamped

clam051 apply   12345                   -> 12345
clam053 apply   1234                    -> 1234
clam055 apply   123                     -> 123
clam057 apply   12                      -> 12
clam059 apply   1                       -> 1
clam061 apply   1.23                    -> 1.23
clam063 apply   123.45                  -> 123.45

-- Nmin and below
clam071 apply   1E-383                  -> 1E-383
clam073 apply   1.000000000000000E-383  -> 1.000000000000000E-383
clam075 apply   1.000000000000001E-383  -> 1.000000000000001E-383

clam077 apply   0.100000000000000E-383  -> 1.00000000000000E-384  Subnormal
clam079 apply   0.000000000000010E-383  -> 1.0E-397               Subnormal
clam081 apply   0.00000000000001E-383   -> 1E-397                 Subnormal
clam083 apply   0.000000000000001E-383  -> 1E-398                 Subnormal

-- underflows
clam090 apply   1e-398                  -> #0000000000000001  Subnormal
clam091 apply   1.9e-398                -> #0000000000000002  Subnormal Underflow Inexact Rounded
clam092 apply   1.1e-398                -> #0000000000000001  Subnormal Underflow Inexact Rounded
clam093 apply   1.00000000001e-398      -> #0000000000000001  Subnormal Underflow Inexact Rounded
clam094 apply   1.00000000000001e-398   -> #0000000000000001  Subnormal Underflow Inexact Rounded
clam095 apply   1.000000000000001e-398  -> #0000000000000001  Subnormal Underflow Inexact Rounded
76 77 78 79
clam096 apply   0.1e-398                -> #0000000000000000  Subnormal Underflow Inexact Rounded Clamped
clam097 apply   0.00000000001e-398      -> #0000000000000000  Subnormal Underflow Inexact Rounded Clamped
clam098 apply   0.00000000000001e-398   -> #0000000000000000  Subnormal Underflow Inexact Rounded Clamped
clam099 apply   0.000000000000001e-398  -> #0000000000000000  Subnormal Underflow Inexact Rounded Clamped
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

-- Same again, negatives
-- Nmax and similar
clam122 apply  -9.999999999999999E+384  -> -9.999999999999999E+384
clam124 apply  -1.234567890123456E+384  -> -1.234567890123456E+384
-- fold-downs (more below)
clam130 apply  -1.23E+384               -> -1.230000000000000E+384 Clamped
clam132 apply  -1E+384                  -> -1.000000000000000E+384 Clamped

clam151 apply  -12345                   -> -12345
clam153 apply  -1234                    -> -1234
clam155 apply  -123                     -> -123
clam157 apply  -12                      -> -12
clam159 apply  -1                       -> -1
clam161 apply  -1.23                    -> -1.23
clam163 apply  -123.45                  -> -123.45

-- Nmin and below
clam171 apply  -1E-383                  -> -1E-383
clam173 apply  -1.000000000000000E-383  -> -1.000000000000000E-383
clam175 apply  -1.000000000000001E-383  -> -1.000000000000001E-383

clam177 apply  -0.100000000000000E-383  -> -1.00000000000000E-384  Subnormal
clam179 apply  -0.000000000000010E-383  -> -1.0E-397               Subnormal
clam181 apply  -0.00000000000001E-383   -> -1E-397                 Subnormal
clam183 apply  -0.000000000000001E-383  -> -1E-398                 Subnormal

-- underflows
clam189 apply   -1e-398                 -> #8000000000000001  Subnormal
clam190 apply   -1.0e-398               -> #8000000000000001  Subnormal Rounded
clam191 apply   -1.9e-398               -> #8000000000000002  Subnormal Underflow Inexact Rounded
clam192 apply   -1.1e-398               -> #8000000000000001  Subnormal Underflow Inexact Rounded
clam193 apply   -1.00000000001e-398     -> #8000000000000001  Subnormal Underflow Inexact Rounded
clam194 apply   -1.00000000000001e-398  -> #8000000000000001  Subnormal Underflow Inexact Rounded
clam195 apply   -1.000000000000001e-398 -> #8000000000000001  Subnormal Underflow Inexact Rounded
115 116 117 118
clam196 apply   -0.1e-398               -> #8000000000000000  Subnormal Underflow Inexact Rounded Clamped
clam197 apply   -0.00000000001e-398     -> #8000000000000000  Subnormal Underflow Inexact Rounded Clamped
clam198 apply   -0.00000000000001e-398  -> #8000000000000000  Subnormal Underflow Inexact Rounded Clamped
clam199 apply   -0.000000000000001e-398 -> #8000000000000000  Subnormal Underflow Inexact Rounded Clamped
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

-- zeros
clam401 apply   0E-500                  -> 0E-398  Clamped
clam402 apply   0E-400                  -> 0E-398  Clamped
clam403 apply   0E-398                  -> 0E-398
clam404 apply   0.000000000000000E-383  -> 0E-398
clam405 apply   0E-2                    ->  0.00
clam406 apply   0                       -> 0
clam407 apply   0E+3                    -> 0E+3
clam408 apply   0E+369                  -> 0E+369
-- clamped zeros...
clam410 apply   0E+370                  -> 0E+369 Clamped
clam411 apply   0E+384                  -> 0E+369 Clamped
clam412 apply   0E+400                  -> 0E+369 Clamped
clam413 apply   0E+500                  -> 0E+369 Clamped

-- negative zeros
clam420 apply   -0E-500                 -> -0E-398 Clamped
clam421 apply   -0E-400                 -> -0E-398 Clamped
clam422 apply   -0E-398                 -> -0E-398
clam423 apply   -0.000000000000000E-383 -> -0E-398
clam424 apply   -0E-2                   -> -0.00
clam425 apply   -0                      -> -0
clam426 apply   -0E+3                   -> -0E+3
clam427 apply   -0E+369                 -> -0E+369
-- clamped zeros...
clam431 apply   -0E+370                 -> -0E+369 Clamped
clam432 apply   -0E+384                 -> -0E+369 Clamped
clam433 apply   -0E+400                 -> -0E+369 Clamped
clam434 apply   -0E+500                 -> -0E+369 Clamped

-- fold-down full sequence
clam601 apply   1E+384                  -> 1.000000000000000E+384 Clamped
clam603 apply   1E+383                  -> 1.00000000000000E+383 Clamped
clam605 apply   1E+382                  -> 1.0000000000000E+382 Clamped
clam607 apply   1E+381                  -> 1.000000000000E+381 Clamped
clam609 apply   1E+380                  -> 1.00000000000E+380 Clamped
clam611 apply   1E+379                  -> 1.0000000000E+379 Clamped
clam613 apply   1E+378                  -> 1.000000000E+378 Clamped
clam615 apply   1E+377                  -> 1.00000000E+377 Clamped
clam617 apply   1E+376                  -> 1.0000000E+376 Clamped
clam619 apply   1E+375                  -> 1.000000E+375 Clamped
clam621 apply   1E+374                  -> 1.00000E+374 Clamped
clam623 apply   1E+373                  -> 1.0000E+373 Clamped
clam625 apply   1E+372                  -> 1.000E+372 Clamped
clam627 apply   1E+371                  -> 1.00E+371 Clamped
clam629 apply   1E+370                  -> 1.0E+370 Clamped
clam631 apply   1E+369                  -> 1E+369
clam633 apply   1E+368                  -> 1E+368
-- same with 9s
clam641 apply   9E+384                  -> 9.000000000000000E+384 Clamped
clam643 apply   9E+383                  -> 9.00000000000000E+383 Clamped
clam645 apply   9E+382                  -> 9.0000000000000E+382 Clamped
clam647 apply   9E+381                  -> 9.000000000000E+381 Clamped
clam649 apply   9E+380                  -> 9.00000000000E+380 Clamped
clam651 apply   9E+379                  -> 9.0000000000E+379 Clamped
clam653 apply   9E+378                  -> 9.000000000E+378 Clamped
clam655 apply   9E+377                  -> 9.00000000E+377 Clamped
clam657 apply   9E+376                  -> 9.0000000E+376 Clamped
clam659 apply   9E+375                  -> 9.000000E+375 Clamped
clam661 apply   9E+374                  -> 9.00000E+374 Clamped
clam663 apply   9E+373                  -> 9.0000E+373 Clamped
clam665 apply   9E+372                  -> 9.000E+372 Clamped
clam667 apply   9E+371                  -> 9.00E+371 Clamped
clam669 apply   9E+370                  -> 9.0E+370 Clamped
clam671 apply   9E+369                  -> 9E+369
clam673 apply   9E+368                  -> 9E+368

187 188 189 190 191 192 193 194 195 196 197 198 199 200
-- subnormals clamped to 0-Etiny
precision:   16
maxExponent: 384
minExponent: -383
clam681 apply 7E-398     -> 7E-398 Subnormal
clam682 apply 0E-398     -> 0E-398
clam683 apply 7E-399     -> 1E-398 Subnormal Underflow Inexact Rounded
clam684 apply 4E-399     -> 0E-398 Clamped Subnormal Underflow Inexact Rounded
clam685 apply 7E-400     -> 0E-398 Clamped Subnormal Underflow Inexact Rounded
clam686 apply 7E-401     -> 0E-398 Clamped Subnormal Underflow Inexact Rounded
clam687 apply 0E-399     -> 0E-398 Clamped
clam688 apply 0E-400     -> 0E-398 Clamped
clam689 apply 0E-401     -> 0E-398 Clamped

201 202 203 204 205 206 207 208 209 210 211
-- example from documentation
precision:   7
rounding:    half_even
maxExponent: +96
minExponent: -95

clamp:       0
clam700 apply   1.23E+96                -> 1.23E+96

clamp:       1
clam701 apply   1.23E+96                -> 1.230000E+96 Clamped