📄 add.dectest
字号:
------------------------------------------------------------------------
-- add.decTest -- decimal addition --
-- Copyright (c) IBM Corporation, 1981, 2003. 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.15
precision: 9
rounding: half_up
maxExponent: 999
extended: 1
-- [first group are 'quick confidence check']
addx001 add 1 1 -> 2
addx002 add 2 3 -> 5
addx003 add '5.75' '3.3' -> 9.05
addx004 add '5' '-3' -> 2
addx005 add '-5' '-3' -> -8
addx006 add '-7' '2.5' -> -4.5
addx007 add '0.7' '0.3' -> 1.0
addx008 add '1.25' '1.25' -> 2.50
addx009 add '1.23456789' '1.00000000' -> '2.23456789'
addx010 add '1.23456789' '1.00000011' -> '2.23456800'
addx011 add '0.4444444444' '0.5555555555' -> '1.00000000' Inexact Rounded
addx012 add '0.4444444440' '0.5555555555' -> '1.00000000' Inexact Rounded
addx013 add '0.4444444444' '0.5555555550' -> '0.999999999' Inexact Rounded
addx014 add '0.44444444449' '0' -> '0.444444444' Inexact Rounded
addx015 add '0.444444444499' '0' -> '0.444444444' Inexact Rounded
addx016 add '0.4444444444999' '0' -> '0.444444444' Inexact Rounded
addx017 add '0.4444444445000' '0' -> '0.444444445' Inexact Rounded
addx018 add '0.4444444445001' '0' -> '0.444444445' Inexact Rounded
addx019 add '0.444444444501' '0' -> '0.444444445' Inexact Rounded
addx020 add '0.44444444451' '0' -> '0.444444445' Inexact Rounded
addx021 add 0 1 -> 1
addx022 add 1 1 -> 2
addx023 add 2 1 -> 3
addx024 add 3 1 -> 4
addx025 add 4 1 -> 5
addx026 add 5 1 -> 6
addx027 add 6 1 -> 7
addx028 add 7 1 -> 8
addx029 add 8 1 -> 9
addx030 add 9 1 -> 10
-- some carrying effects
addx031 add '0.9998' '0.0000' -> '0.9998'
addx032 add '0.9998' '0.0001' -> '0.9999'
addx033 add '0.9998' '0.0002' -> '1.0000'
addx034 add '0.9998' '0.0003' -> '1.0001'
addx035 add '70' '10000e+9' -> '1.00000000E+13' Inexact Rounded
addx036 add '700' '10000e+9' -> '1.00000000E+13' Inexact Rounded
addx037 add '7000' '10000e+9' -> '1.00000000E+13' Inexact Rounded
addx038 add '70000' '10000e+9' -> '1.00000001E+13' Inexact Rounded
addx039 add '700000' '10000e+9' -> '1.00000007E+13' Rounded
-- symmetry:
addx040 add '10000e+9' '70' -> '1.00000000E+13' Inexact Rounded
addx041 add '10000e+9' '700' -> '1.00000000E+13' Inexact Rounded
addx042 add '10000e+9' '7000' -> '1.00000000E+13' Inexact Rounded
addx044 add '10000e+9' '70000' -> '1.00000001E+13' Inexact Rounded
addx045 add '10000e+9' '700000' -> '1.00000007E+13' Rounded
-- same, higher precision
precision: 15
addx046 add '10000e+9' '7' -> '10000000000007'
addx047 add '10000e+9' '70' -> '10000000000070'
addx048 add '10000e+9' '700' -> '10000000000700'
addx049 add '10000e+9' '7000' -> '10000000007000'
addx050 add '10000e+9' '70000' -> '10000000070000'
addx051 add '10000e+9' '700000' -> '10000000700000'
-- examples from decarith
addx053 add '12' '7.00' -> '19.00'
addx054 add '1.3' '-1.07' -> '0.23'
addx055 add '1.3' '-1.30' -> '0.00'
addx056 add '1.3' '-2.07' -> '-0.77'
addx057 add '1E+2' '1E+4' -> '1.01E+4'
-- zero preservation
precision: 6
addx060 add '10000e+9' '70000' -> '1.00000E+13' Inexact Rounded
addx061 add 1 '0.0001' -> '1.0001'
addx062 add 1 '0.00001' -> '1.00001'
addx063 add 1 '0.000001' -> '1.00000' Inexact Rounded
addx064 add 1 '0.0000001' -> '1.00000' Inexact Rounded
addx065 add 1 '0.00000001' -> '1.00000' Inexact Rounded
-- some funny zeros [in case of bad signum]
addx070 add 1 0 -> 1
addx071 add 1 0. -> 1
addx072 add 1 .0 -> 1.0
addx073 add 1 0.0 -> 1.0
addx074 add 1 0.00 -> 1.00
addx075 add 0 1 -> 1
addx076 add 0. 1 -> 1
addx077 add .0 1 -> 1.0
addx078 add 0.0 1 -> 1.0
addx079 add 0.00 1 -> 1.00
precision: 9
-- some carries
addx080 add 999999998 1 -> 999999999
addx081 add 999999999 1 -> 1.00000000E+9 Rounded
addx082 add 99999999 1 -> 100000000
addx083 add 9999999 1 -> 10000000
addx084 add 999999 1 -> 1000000
addx085 add 99999 1 -> 100000
addx086 add 9999 1 -> 10000
addx087 add 999 1 -> 1000
addx088 add 99 1 -> 100
addx089 add 9 1 -> 10
-- more LHS swaps
addx090 add '-56267E-10' 0 -> '-0.0000056267'
addx091 add '-56267E-6' 0 -> '-0.056267'
addx092 add '-56267E-5' 0 -> '-0.56267'
addx093 add '-56267E-4' 0 -> '-5.6267'
addx094 add '-56267E-3' 0 -> '-56.267'
addx095 add '-56267E-2' 0 -> '-562.67'
addx096 add '-56267E-1' 0 -> '-5626.7'
addx097 add '-56267E-0' 0 -> '-56267'
addx098 add '-5E-10' 0 -> '-5E-10'
addx099 add '-5E-7' 0 -> '-5E-7'
addx100 add '-5E-6' 0 -> '-0.000005'
addx101 add '-5E-5' 0 -> '-0.00005'
addx102 add '-5E-4' 0 -> '-0.0005'
addx103 add '-5E-1' 0 -> '-0.5'
addx104 add '-5E0' 0 -> '-5'
addx105 add '-5E1' 0 -> '-50'
addx106 add '-5E5' 0 -> '-500000'
addx107 add '-5E8' 0 -> '-500000000'
addx108 add '-5E9' 0 -> '-5.00000000E+9' Rounded
addx109 add '-5E10' 0 -> '-5.00000000E+10' Rounded
addx110 add '-5E11' 0 -> '-5.00000000E+11' Rounded
addx111 add '-5E100' 0 -> '-5.00000000E+100' Rounded
-- more RHS swaps
addx113 add 0 '-56267E-10' -> '-0.0000056267'
addx114 add 0 '-56267E-6' -> '-0.056267'
addx116 add 0 '-56267E-5' -> '-0.56267'
addx117 add 0 '-56267E-4' -> '-5.6267'
addx119 add 0 '-56267E-3' -> '-56.267'
addx120 add 0 '-56267E-2' -> '-562.67'
addx121 add 0 '-56267E-1' -> '-5626.7'
addx122 add 0 '-56267E-0' -> '-56267'
addx123 add 0 '-5E-10' -> '-5E-10'
addx124 add 0 '-5E-7' -> '-5E-7'
addx125 add 0 '-5E-6' -> '-0.000005'
addx126 add 0 '-5E-5' -> '-0.00005'
addx127 add 0 '-5E-4' -> '-0.0005'
addx128 add 0 '-5E-1' -> '-0.5'
addx129 add 0 '-5E0' -> '-5'
addx130 add 0 '-5E1' -> '-50'
addx131 add 0 '-5E5' -> '-500000'
addx132 add 0 '-5E8' -> '-500000000'
addx133 add 0 '-5E9' -> '-5.00000000E+9' Rounded
addx134 add 0 '-5E10' -> '-5.00000000E+10' Rounded
addx135 add 0 '-5E11' -> '-5.00000000E+11' Rounded
addx136 add 0 '-5E100' -> '-5.00000000E+100' Rounded
-- related
addx137 add 1 '0E-12' -> '1.00000000' Rounded
addx138 add -1 '0E-12' -> '-1.00000000' Rounded
addx139 add '0E-12' 1 -> '1.00000000' Rounded
addx140 add '0E-12' -1 -> '-1.00000000' Rounded
addx141 add 1E+4 0.0000 -> '10000.0000'
addx142 add 1E+4 0.00000 -> '10000.0000' Rounded
addx143 add 0.000 1E+5 -> '100000.000'
addx144 add 0.0000 1E+5 -> '100000.000' Rounded
-- [some of the next group are really constructor tests]
addx146 add '00.0' 0 -> '0.0'
addx147 add '0.00' 0 -> '0.00'
addx148 add 0 '0.00' -> '0.00'
addx149 add 0 '00.0' -> '0.0'
addx150 add '00.0' '0.00' -> '0.00'
addx151 add '0.00' '00.0' -> '0.00'
addx152 add '3' '.3' -> '3.3'
addx153 add '3.' '.3' -> '3.3'
addx154 add '3.0' '.3' -> '3.3'
addx155 add '3.00' '.3' -> '3.30'
addx156 add '3' '3' -> '6'
addx157 add '3' '+3' -> '6'
addx158 add '3' '-3' -> '0'
addx159 add '0.3' '-0.3' -> '0.0'
addx160 add '0.03' '-0.03' -> '0.00'
-- try borderline precision, with carries, etc.
precision: 15
addx161 add '1E+12' '-1' -> '999999999999'
addx162 add '1E+12' '1.11' -> '1000000000001.11'
addx163 add '1.11' '1E+12' -> '1000000000001.11'
addx164 add '-1' '1E+12' -> '999999999999'
addx165 add '7E+12' '-1' -> '6999999999999'
addx166 add '7E+12' '1.11' -> '7000000000001.11'
addx167 add '1.11' '7E+12' -> '7000000000001.11'
addx168 add '-1' '7E+12' -> '6999999999999'
-- 123456789012345 123456789012345 1 23456789012345
addx170 add '0.444444444444444' '0.555555555555563' -> '1.00000000000001' Inexact Rounded
addx171 add '0.444444444444444' '0.555555555555562' -> '1.00000000000001' Inexact Rounded
addx172 add '0.444444444444444' '0.555555555555561' -> '1.00000000000001' Inexact Rounded
addx173 add '0.444444444444444' '0.555555555555560' -> '1.00000000000000' Inexact Rounded
addx174 add '0.444444444444444' '0.555555555555559' -> '1.00000000000000' Inexact Rounded
addx175 add '0.444444444444444' '0.555555555555558' -> '1.00000000000000' Inexact Rounded
addx176 add '0.444444444444444' '0.555555555555557' -> '1.00000000000000' Inexact Rounded
addx177 add '0.444444444444444' '0.555555555555556' -> '1.00000000000000' Rounded
addx178 add '0.444444444444444' '0.555555555555555' -> '0.999999999999999'
addx179 add '0.444444444444444' '0.555555555555554' -> '0.999999999999998'
addx180 add '0.444444444444444' '0.555555555555553' -> '0.999999999999997'
addx181 add '0.444444444444444' '0.555555555555552' -> '0.999999999999996'
addx182 add '0.444444444444444' '0.555555555555551' -> '0.999999999999995'
addx183 add '0.444444444444444' '0.555555555555550' -> '0.999999999999994'
-- and some more, including residue effects and different roundings
precision: 9
rounding: half_up
addx200 add '123456789' 0 -> '123456789'
addx201 add '123456789' 0.000000001 -> '123456789' Inexact Rounded
addx202 add '123456789' 0.000001 -> '123456789' Inexact Rounded
addx203 add '123456789' 0.1 -> '123456789' Inexact Rounded
addx204 add '123456789' 0.4 -> '123456789' Inexact Rounded
addx205 add '123456789' 0.49 -> '123456789' Inexact Rounded
addx206 add '123456789' 0.499999 -> '123456789' Inexact Rounded
addx207 add '123456789' 0.499999999 -> '123456789' Inexact Rounded
addx208 add '123456789' 0.5 -> '123456790' Inexact Rounded
addx209 add '123456789' 0.500000001 -> '123456790' Inexact Rounded
addx210 add '123456789' 0.500001 -> '123456790' Inexact Rounded
addx211 add '123456789' 0.51 -> '123456790' Inexact Rounded
addx212 add '123456789' 0.6 -> '123456790' Inexact Rounded
addx213 add '123456789' 0.9 -> '123456790' Inexact Rounded
addx214 add '123456789' 0.99999 -> '123456790' Inexact Rounded
addx215 add '123456789' 0.999999999 -> '123456790' Inexact Rounded
addx216 add '123456789' 1 -> '123456790'
addx217 add '123456789' 1.000000001 -> '123456790' Inexact Rounded
addx218 add '123456789' 1.00001 -> '123456790' Inexact Rounded
addx219 add '123456789' 1.1 -> '123456790' Inexact Rounded
rounding: half_even
addx220 add '123456789' 0 -> '123456789'
addx221 add '123456789' 0.000000001 -> '123456789' Inexact Rounded
addx222 add '123456789' 0.000001 -> '123456789' Inexact Rounded
addx223 add '123456789' 0.1 -> '123456789' Inexact Rounded
addx224 add '123456789' 0.4 -> '123456789' Inexact Rounded
addx225 add '123456789' 0.49 -> '123456789' Inexact Rounded
addx226 add '123456789' 0.499999 -> '123456789' Inexact Rounded
addx227 add '123456789' 0.499999999 -> '123456789' Inexact Rounded
addx228 add '123456789' 0.5 -> '123456790' Inexact Rounded
addx229 add '123456789' 0.500000001 -> '123456790' Inexact Rounded
addx230 add '123456789' 0.500001 -> '123456790' Inexact Rounded
addx231 add '123456789' 0.51 -> '123456790' Inexact Rounded
addx232 add '123456789' 0.6 -> '123456790' Inexact Rounded
addx233 add '123456789' 0.9 -> '123456790' Inexact Rounded
addx234 add '123456789' 0.99999 -> '123456790' Inexact Rounded
addx235 add '123456789' 0.999999999 -> '123456790' Inexact Rounded
addx236 add '123456789' 1 -> '123456790'
addx237 add '123456789' 1.00000001 -> '123456790' Inexact Rounded
addx238 add '123456789' 1.00001 -> '123456790' Inexact Rounded
addx239 add '123456789' 1.1 -> '123456790' Inexact Rounded
-- critical few with even bottom digit...
addx240 add '123456788' 0.499999999 -> '123456788' Inexact Rounded
addx241 add '123456788' 0.5 -> '123456788' Inexact Rounded
addx242 add '123456788' 0.500000001 -> '123456789' Inexact Rounded
rounding: down
addx250 add '123456789' 0 -> '123456789'
addx251 add '123456789' 0.000000001 -> '123456789' Inexact Rounded
addx252 add '123456789' 0.000001 -> '123456789' Inexact Rounded
addx253 add '123456789' 0.1 -> '123456789' Inexact Rounded
addx254 add '123456789' 0.4 -> '123456789' Inexact Rounded
addx255 add '123456789' 0.49 -> '123456789' Inexact Rounded
addx256 add '123456789' 0.499999 -> '123456789' Inexact Rounded
addx257 add '123456789' 0.499999999 -> '123456789' Inexact Rounded
addx258 add '123456789' 0.5 -> '123456789' Inexact Rounded
addx259 add '123456789' 0.500000001 -> '123456789' Inexact Rounded
addx260 add '123456789' 0.500001 -> '123456789' Inexact Rounded
addx261 add '123456789' 0.51 -> '123456789' Inexact Rounded
addx262 add '123456789' 0.6 -> '123456789' Inexact Rounded
addx263 add '123456789' 0.9 -> '123456789' Inexact Rounded
addx264 add '123456789' 0.99999 -> '123456789' Inexact Rounded
addx265 add '123456789' 0.999999999 -> '123456789' Inexact Rounded
addx266 add '123456789' 1 -> '123456790'
addx267 add '123456789' 1.00000001 -> '123456790' Inexact Rounded
addx268 add '123456789' 1.00001 -> '123456790' Inexact Rounded
addx269 add '123456789' 1.1 -> '123456790' Inexact Rounded
rounding: half_up
-- input preparation tests (operands should not be rounded)
precision: 3
rounding: half_up
addx270 add '12345678900000' 9999999999999 -> '2.23E+13' Inexact Rounded
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -