1 ------------------------------------------------------------------------ 2 -- clamp.decTest -- clamped exponent tests (format-independent) -- 3 -- Copyright (c) IBM Corporation, 2000, 2008. All rights reserved. -- 4 ------------------------------------------------------------------------ 5 -- Please see the document "General Decimal Arithmetic Testcases" -- 6 -- at http://www2.hursley.ibm.com/decimal for the description of -- 7 -- these testcases. -- 8 -- -- 9 -- These testcases are experimental ('beta' versions), and they -- 10 -- may contain errors. They are offered on an as-is basis. In -- 11 -- particular, achieving the same results as the tests here is not -- 12 -- a guarantee that an implementation complies with any Standard -- 13 -- or specification. The tests are not exhaustive. -- 14 -- -- 15 -- Please send comments, suggestions, and corrections to the author: -- 16 -- Mike Cowlishaw, IBM Fellow -- 17 -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- 18 -- mfc (a] uk.ibm.com -- 19 ------------------------------------------------------------------------ 20 version: 2.59 21 22 -- This set of tests uses the same limits as the 8-byte concrete 23 -- representation, but applies clamping without using format-specific 24 -- conversions. 25 26 extended: 1 27 precision: 16 28 rounding: half_even 29 maxExponent: 384 30 minExponent: -383 31 clamp: 1 32 33 -- General testcases 34 35 -- Normality 36 clam010 apply 1234567890123456 -> 1234567890123456 37 clam011 apply 1234567890123456.0 -> 1234567890123456 Rounded 38 clam012 apply 1234567890123456.1 -> 1234567890123456 Rounded Inexact 39 clam013 apply -1234567890123456 -> -1234567890123456 40 clam014 apply -1234567890123456.0 -> -1234567890123456 Rounded 41 clam015 apply -1234567890123456.1 -> -1234567890123456 Rounded Inexact 42 43 44 -- Nmax and similar 45 clam022 apply 9.999999999999999E+384 -> 9.999999999999999E+384 46 clam024 apply 1.234567890123456E+384 -> 1.234567890123456E+384 47 -- fold-downs (more below) 48 clam030 apply 1.23E+384 -> 1.230000000000000E+384 Clamped 49 clam032 apply 1E+384 -> 1.000000000000000E+384 Clamped 50 51 clam051 apply 12345 -> 12345 52 clam053 apply 1234 -> 1234 53 clam055 apply 123 -> 123 54 clam057 apply 12 -> 12 55 clam059 apply 1 -> 1 56 clam061 apply 1.23 -> 1.23 57 clam063 apply 123.45 -> 123.45 58 59 -- Nmin and below 60 clam071 apply 1E-383 -> 1E-383 61 clam073 apply 1.000000000000000E-383 -> 1.000000000000000E-383 62 clam075 apply 1.000000000000001E-383 -> 1.000000000000001E-383 63 64 clam077 apply 0.100000000000000E-383 -> 1.00000000000000E-384 Subnormal 65 clam079 apply 0.000000000000010E-383 -> 1.0E-397 Subnormal 66 clam081 apply 0.00000000000001E-383 -> 1E-397 Subnormal 67 clam083 apply 0.000000000000001E-383 -> 1E-398 Subnormal 68 69 -- underflows 70 clam090 apply 1e-398 -> #0000000000000001 Subnormal 71 clam091 apply 1.9e-398 -> #0000000000000002 Subnormal Underflow Inexact Rounded 72 clam092 apply 1.1e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded 73 clam093 apply 1.00000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded 74 clam094 apply 1.00000000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded 75 clam095 apply 1.000000000000001e-398 -> #0000000000000001 Subnormal Underflow Inexact Rounded 76 clam096 apply 0.1e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded Clamped 77 clam097 apply 0.00000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded Clamped 78 clam098 apply 0.00000000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded Clamped 79 clam099 apply 0.000000000000001e-398 -> #0000000000000000 Subnormal Underflow Inexact Rounded Clamped 80 81 -- Same again, negatives 82 -- Nmax and similar 83 clam122 apply -9.999999999999999E+384 -> -9.999999999999999E+384 84 clam124 apply -1.234567890123456E+384 -> -1.234567890123456E+384 85 -- fold-downs (more below) 86 clam130 apply -1.23E+384 -> -1.230000000000000E+384 Clamped 87 clam132 apply -1E+384 -> -1.000000000000000E+384 Clamped 88 89 clam151 apply -12345 -> -12345 90 clam153 apply -1234 -> -1234 91 clam155 apply -123 -> -123 92 clam157 apply -12 -> -12 93 clam159 apply -1 -> -1 94 clam161 apply -1.23 -> -1.23 95 clam163 apply -123.45 -> -123.45 96 97 -- Nmin and below 98 clam171 apply -1E-383 -> -1E-383 99 clam173 apply -1.000000000000000E-383 -> -1.000000000000000E-383 100 clam175 apply -1.000000000000001E-383 -> -1.000000000000001E-383 101 102 clam177 apply -0.100000000000000E-383 -> -1.00000000000000E-384 Subnormal 103 clam179 apply -0.000000000000010E-383 -> -1.0E-397 Subnormal 104 clam181 apply -0.00000000000001E-383 -> -1E-397 Subnormal 105 clam183 apply -0.000000000000001E-383 -> -1E-398 Subnormal 106 107 -- underflows 108 clam189 apply -1e-398 -> #8000000000000001 Subnormal 109 clam190 apply -1.0e-398 -> #8000000000000001 Subnormal Rounded 110 clam191 apply -1.9e-398 -> #8000000000000002 Subnormal Underflow Inexact Rounded 111 clam192 apply -1.1e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded 112 clam193 apply -1.00000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded 113 clam194 apply -1.00000000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded 114 clam195 apply -1.000000000000001e-398 -> #8000000000000001 Subnormal Underflow Inexact Rounded 115 clam196 apply -0.1e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded Clamped 116 clam197 apply -0.00000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded Clamped 117 clam198 apply -0.00000000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded Clamped 118 clam199 apply -0.000000000000001e-398 -> #8000000000000000 Subnormal Underflow Inexact Rounded Clamped 119 120 -- zeros 121 clam401 apply 0E-500 -> 0E-398 Clamped 122 clam402 apply 0E-400 -> 0E-398 Clamped 123 clam403 apply 0E-398 -> 0E-398 124 clam404 apply 0.000000000000000E-383 -> 0E-398 125 clam405 apply 0E-2 -> 0.00 126 clam406 apply 0 -> 0 127 clam407 apply 0E+3 -> 0E+3 128 clam408 apply 0E+369 -> 0E+369 129 -- clamped zeros... 130 clam410 apply 0E+370 -> 0E+369 Clamped 131 clam411 apply 0E+384 -> 0E+369 Clamped 132 clam412 apply 0E+400 -> 0E+369 Clamped 133 clam413 apply 0E+500 -> 0E+369 Clamped 134 135 -- negative zeros 136 clam420 apply -0E-500 -> -0E-398 Clamped 137 clam421 apply -0E-400 -> -0E-398 Clamped 138 clam422 apply -0E-398 -> -0E-398 139 clam423 apply -0.000000000000000E-383 -> -0E-398 140 clam424 apply -0E-2 -> -0.00 141 clam425 apply -0 -> -0 142 clam426 apply -0E+3 -> -0E+3 143 clam427 apply -0E+369 -> -0E+369 144 -- clamped zeros... 145 clam431 apply -0E+370 -> -0E+369 Clamped 146 clam432 apply -0E+384 -> -0E+369 Clamped 147 clam433 apply -0E+400 -> -0E+369 Clamped 148 clam434 apply -0E+500 -> -0E+369 Clamped 149 150 -- fold-down full sequence 151 clam601 apply 1E+384 -> 1.000000000000000E+384 Clamped 152 clam603 apply 1E+383 -> 1.00000000000000E+383 Clamped 153 clam605 apply 1E+382 -> 1.0000000000000E+382 Clamped 154 clam607 apply 1E+381 -> 1.000000000000E+381 Clamped 155 clam609 apply 1E+380 -> 1.00000000000E+380 Clamped 156 clam611 apply 1E+379 -> 1.0000000000E+379 Clamped 157 clam613 apply 1E+378 -> 1.000000000E+378 Clamped 158 clam615 apply 1E+377 -> 1.00000000E+377 Clamped 159 clam617 apply 1E+376 -> 1.0000000E+376 Clamped 160 clam619 apply 1E+375 -> 1.000000E+375 Clamped 161 clam621 apply 1E+374 -> 1.00000E+374 Clamped 162 clam623 apply 1E+373 -> 1.0000E+373 Clamped 163 clam625 apply 1E+372 -> 1.000E+372 Clamped 164 clam627 apply 1E+371 -> 1.00E+371 Clamped 165 clam629 apply 1E+370 -> 1.0E+370 Clamped 166 clam631 apply 1E+369 -> 1E+369 167 clam633 apply 1E+368 -> 1E+368 168 -- same with 9s 169 clam641 apply 9E+384 -> 9.000000000000000E+384 Clamped 170 clam643 apply 9E+383 -> 9.00000000000000E+383 Clamped 171 clam645 apply 9E+382 -> 9.0000000000000E+382 Clamped 172 clam647 apply 9E+381 -> 9.000000000000E+381 Clamped 173 clam649 apply 9E+380 -> 9.00000000000E+380 Clamped 174 clam651 apply 9E+379 -> 9.0000000000E+379 Clamped 175 clam653 apply 9E+378 -> 9.000000000E+378 Clamped 176 clam655 apply 9E+377 -> 9.00000000E+377 Clamped 177 clam657 apply 9E+376 -> 9.0000000E+376 Clamped 178 clam659 apply 9E+375 -> 9.000000E+375 Clamped 179 clam661 apply 9E+374 -> 9.00000E+374 Clamped 180 clam663 apply 9E+373 -> 9.0000E+373 Clamped 181 clam665 apply 9E+372 -> 9.000E+372 Clamped 182 clam667 apply 9E+371 -> 9.00E+371 Clamped 183 clam669 apply 9E+370 -> 9.0E+370 Clamped 184 clam671 apply 9E+369 -> 9E+369 185 clam673 apply 9E+368 -> 9E+368 186 187 -- subnormals clamped to 0-Etiny 188 precision: 16 189 maxExponent: 384 190 minExponent: -383 191 clam681 apply 7E-398 -> 7E-398 Subnormal 192 clam682 apply 0E-398 -> 0E-398 193 clam683 apply 7E-399 -> 1E-398 Subnormal Underflow Inexact Rounded 194 clam684 apply 4E-399 -> 0E-398 Clamped Subnormal Underflow Inexact Rounded 195 clam685 apply 7E-400 -> 0E-398 Clamped Subnormal Underflow Inexact Rounded 196 clam686 apply 7E-401 -> 0E-398 Clamped Subnormal Underflow Inexact Rounded 197 clam687 apply 0E-399 -> 0E-398 Clamped 198 clam688 apply 0E-400 -> 0E-398 Clamped 199 clam689 apply 0E-401 -> 0E-398 Clamped 200 201 -- example from documentation 202 precision: 7 203 rounding: half_even 204 maxExponent: +96 205 minExponent: -95 206 207 clamp: 0 208 clam700 apply 1.23E+96 -> 1.23E+96 209 210 clamp: 1 211 clam701 apply 1.23E+96 -> 1.230000E+96 Clamped 212