long-decimal 0.01.00 → 0.01.01
Sign up to get free protection for your applications and to get access to all the features.
- data/README +6 -3
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/classes/LongDecimal.html +207 -189
- data/doc/classes/LongDecimal.src/M000036.html +1 -1
- data/doc/classes/LongDecimal.src/M000037.html +1 -1
- data/doc/classes/LongDecimal.src/M000038.html +1 -1
- data/doc/classes/LongDecimal.src/M000039.html +1 -1
- data/doc/classes/LongDecimal.src/M000040.html +1 -1
- data/doc/classes/LongDecimal.src/M000041.html +1 -1
- data/doc/classes/LongDecimal.src/M000042.html +1 -1
- data/doc/classes/LongDecimal.src/M000043.html +1 -1
- data/doc/classes/LongDecimal.src/M000044.html +1 -1
- data/doc/classes/LongDecimal.src/M000045.html +1 -1
- data/doc/classes/LongDecimal.src/M000046.html +1 -1
- data/doc/classes/LongDecimal.src/M000047.html +1 -1
- data/doc/classes/LongDecimal.src/M000048.html +1 -1
- data/doc/classes/LongDecimal.src/M000049.html +1 -1
- data/doc/classes/LongDecimal.src/M000050.html +15 -2
- data/doc/classes/LongDecimal.src/M000051.html +1 -1
- data/doc/classes/LongDecimal.src/M000052.html +2 -2
- data/doc/classes/LongDecimal.src/M000053.html +1 -1
- data/doc/classes/LongDecimal.src/M000054.html +1 -1
- data/doc/classes/LongDecimal.src/M000055.html +1 -1
- data/doc/classes/LongDecimal.src/M000056.html +1 -1
- data/doc/classes/LongDecimal.src/M000057.html +1 -1
- data/doc/classes/LongDecimal.src/M000058.html +1 -1
- data/doc/classes/LongDecimal.src/M000059.html +1 -1
- data/doc/classes/LongDecimal.src/M000060.html +1 -1
- data/doc/classes/LongDecimal.src/M000062.html +1 -1
- data/doc/classes/LongDecimal.src/M000063.html +1 -1
- data/doc/classes/LongDecimal.src/M000064.html +1 -1
- data/doc/classes/LongDecimal.src/M000065.html +1 -1
- data/doc/classes/LongDecimal.src/M000066.html +4 -8
- data/doc/classes/LongDecimal.src/M000067.html +6 -7
- data/doc/classes/LongDecimal.src/M000068.html +5 -5
- data/doc/classes/LongDecimal.src/M000069.html +6 -6
- data/doc/classes/LongDecimal.src/M000070.html +9 -4
- data/doc/classes/LongDecimal.src/M000071.html +4 -19
- data/doc/classes/LongDecimal.src/M000072.html +15 -5
- data/doc/classes/LongDecimal.src/M000073.html +7 -7
- data/doc/classes/LongDecimal.src/M000074.html +7 -18
- data/doc/classes/LongDecimal.src/M000075.html +20 -7
- data/doc/classes/LongDecimal.src/M000076.html +8 -5
- data/doc/classes/LongDecimal.src/M000077.html +5 -9
- data/doc/classes/LongDecimal.src/M000078.html +5 -5
- data/doc/classes/LongDecimal.src/M000079.html +5 -5
- data/doc/classes/LongDecimal.src/M000080.html +9 -4
- data/doc/classes/LongDecimal.src/M000081.html +4 -7
- data/doc/classes/LongDecimal.src/M000082.html +4 -4
- data/doc/classes/LongDecimal.src/M000083.html +7 -4
- data/doc/classes/LongDecimal.src/M000084.html +4 -4
- data/doc/classes/LongDecimal.src/M000085.html +4 -9
- data/doc/classes/LongDecimal.src/M000086.html +6 -6
- data/doc/classes/LongDecimal.src/M000087.html +9 -5
- data/doc/classes/LongDecimal.src/M000088.html +4 -8
- data/doc/classes/LongDecimal.src/M000089.html +9 -4
- data/doc/classes/LongDecimal.src/M000090.html +4 -4
- data/doc/classes/LongDecimal.src/M000091.html +4 -4
- data/doc/classes/LongDecimal.src/M000092.html +4 -4
- data/doc/classes/LongDecimal.src/M000093.html +4 -59
- data/doc/classes/LongDecimal.src/M000094.html +59 -4
- data/doc/classes/LongDecimal.src/M000095.html +4 -4
- data/doc/classes/LongDecimal.src/M000096.html +4 -5
- data/doc/classes/LongDecimal.src/M000099.html +5 -5
- data/doc/classes/LongDecimal.src/M000100.html +5 -4
- data/doc/classes/LongDecimal.src/M000101.html +4 -4
- data/doc/classes/LongDecimal.src/M000102.html +4 -4
- data/doc/classes/LongDecimal.src/M000103.html +4 -4
- data/doc/classes/LongDecimalBase.html +53 -53
- data/doc/classes/LongDecimalBase.src/M000108.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000109.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000110.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000111.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000112.html +4 -9
- data/doc/classes/LongDecimalBase.src/M000113.html +9 -9
- data/doc/classes/LongDecimalBase.src/M000116.html +9 -5
- data/doc/classes/LongDecimalBase.src/M000117.html +5 -4
- data/doc/classes/LongDecimalQuot.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000003.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000004.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000005.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000006.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000007.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000008.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000009.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000010.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000011.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000012.html +2 -2
- data/doc/classes/LongDecimalQuot.src/M000013.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000014.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000015.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000016.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000017.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000018.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000019.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000020.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000021.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000022.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000023.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000024.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000025.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000026.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000027.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000028.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000029.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000030.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000031.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000034.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000035.html +1 -1
- data/doc/classes/LongDecimalRoundingMode.html +6 -1
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +37 -16
- data/doc/classes/LongMath.html +246 -161
- data/doc/classes/LongMath.src/M000119.html +5 -4
- data/doc/classes/LongMath.src/M000120.html +4 -4
- data/doc/classes/LongMath.src/M000121.html +4 -5
- data/doc/classes/LongMath.src/M000122.html +5 -4
- data/doc/classes/LongMath.src/M000123.html +4 -18
- data/doc/classes/LongMath.src/M000124.html +14 -14
- data/doc/classes/LongMath.src/M000125.html +18 -5
- data/doc/classes/LongMath.src/M000126.html +5 -29
- data/doc/classes/LongMath.src/M000127.html +29 -5
- data/doc/classes/LongMath.src/M000128.html +5 -57
- data/doc/classes/LongMath.src/M000129.html +55 -19
- data/doc/classes/LongMath.src/M000130.html +20 -35
- data/doc/classes/LongMath.src/M000131.html +36 -6
- data/doc/classes/LongMath.src/M000132.html +6 -33
- data/doc/classes/LongMath.src/M000133.html +26 -44
- data/doc/classes/LongMath.src/M000134.html +49 -5
- data/doc/classes/LongMath.src/M000135.html +7 -4
- data/doc/classes/LongMath.src/M000136.html +4 -4
- data/doc/classes/LongMath.src/M000137.html +4 -72
- data/doc/classes/LongMath.src/M000138.html +67 -39
- data/doc/classes/LongMath.src/M000139.html +44 -4
- data/doc/classes/LongMath.src/M000140.html +4 -4
- data/doc/classes/LongMath.src/M000141.html +4 -6
- data/doc/classes/LongMath.src/M000142.html +4 -18
- data/doc/classes/LongMath.src/M000143.html +8 -7
- data/doc/classes/LongMath.src/M000144.html +10 -35
- data/doc/classes/LongMath.src/M000145.html +23 -202
- data/doc/classes/LongMath.src/M000146.html +322 -4
- data/doc/classes/LongMath.src/M000147.html +22 -63
- data/doc/classes/LongMath.src/M000148.html +65 -33
- data/doc/classes/LongMath/CacheKey.html +5 -5
- data/doc/classes/Numeric.html +11 -11
- data/doc/classes/Numeric.src/M000105.html +9 -4
- data/doc/classes/Rational.html +6 -6
- data/doc/created.rid +1 -1
- data/doc/files/lib/long-decimal_rb.html +2 -2
- data/doc/files/lib/long-decimal_rb.src/M000001.html +1 -1
- data/doc/files/lib/long-decimal_rb.src/M000002.html +1 -1
- data/doc/fr_method_index.html +102 -95
- data/lib/long-decimal.rb +206 -49
- data/test/testlongdecimal.rb +736 -21
- data/test/testlongdeclib.rb +136 -25
- data/test/testrandlib.rb +87 -0
- data/test/testrandom.rb +30 -45
- data/test/testrandpower.rb +72 -0
- metadata +4 -2
data/test/testlongdecimal.rb
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
#
|
3
3
|
# testlongdecimal.rb -- runit test for long-decimal.rb
|
4
4
|
#
|
5
|
-
# CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/test/testlongdecimal.rb,v 1.
|
6
|
-
# CVS-Label: $Name:
|
5
|
+
# CVS-ID: $Header: /var/cvs/long-decimal/long-decimal/test/testlongdecimal.rb,v 1.54 2006/05/01 12:22:12 bk1 Exp $
|
6
|
+
# CVS-Label: $Name: ALPHA_01_01 $
|
7
7
|
# Author: $Author: bk1 $ (Karl Brodowsky)
|
8
8
|
#
|
9
9
|
|
@@ -20,7 +20,7 @@ load "test/testlongdeclib.rb"
|
|
20
20
|
class TestLongDecimal_class < RUNIT::TestCase
|
21
21
|
include TestLongDecHelper
|
22
22
|
|
23
|
-
@RCS_ID='-$Id: testlongdecimal.rb,v 1.
|
23
|
+
@RCS_ID='-$Id: testlongdecimal.rb,v 1.54 2006/05/01 12:22:12 bk1 Exp $-'
|
24
24
|
|
25
25
|
#
|
26
26
|
# test split_to_words and merge_from_words
|
@@ -141,12 +141,18 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
141
141
|
10.times do |i|
|
142
142
|
n = (i*i+i)/2
|
143
143
|
x = LongDecimal(n, 3*i)+LongMath.pi(20)
|
144
|
+
check_exp2_floated(x, n)
|
145
|
+
|
144
146
|
y = LongMath.exp2(x, n)
|
145
147
|
yy = LongMath.exp2(x, n + 5)
|
146
148
|
assert_equal(yy.round_to_scale(y.scale, LongDecimal::ROUND_HALF_DOWN), y, "x=#{x} y=#{y} yy=#{yy}")
|
147
149
|
z = LongMath.power(2, x, n)
|
148
150
|
assert_equal(z, y, "exp2 x=#{x} y=#{y} z=#{z} i=#{i} n=#{n}")
|
149
151
|
end
|
152
|
+
|
153
|
+
# random tests that have failed previously
|
154
|
+
check_exp2_floated(LongDecimal("-0.00147492625237084606064197462823289474038138852346725504592707365251736299180323394082648207114993022483949313246714392730651107673327728615912046468517225938833913598854936005"), 20)
|
155
|
+
|
150
156
|
end
|
151
157
|
|
152
158
|
#
|
@@ -156,6 +162,8 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
156
162
|
10.times do |i|
|
157
163
|
n = (i*i+i)/2
|
158
164
|
x = LongDecimal(n, 3*i)+LongMath.pi(20)
|
165
|
+
check_exp10_floated(x, n)
|
166
|
+
|
159
167
|
y = LongMath.exp10(x, n)
|
160
168
|
yy = LongMath.exp10(x, n + 5)
|
161
169
|
assert_equal(yy.round_to_scale(y.scale, LongDecimal::ROUND_HALF_DOWN), y, "x=#{x} y=#{y} yy=#{yy}")
|
@@ -459,6 +467,10 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
459
467
|
check_log_floated(LongDecimal("473.00000000000000000000000000000000003200056000000000000000000000000000000000000000000664"), 1)
|
460
468
|
check_log_floated(LongDecimal("0.0000000000000000000000000000000000081600000000000000000000000000000000007510000886"), 101)
|
461
469
|
check_log_floated(LongDecimal("0.99999999999999999999999571850000000000000000001833124224999999999999992151478630572500000000033603444243589176249999856126853469423130083125615992876877728537781582"), 37)
|
470
|
+
check_log_floated(LongDecimal("0.99999999999999999999999999999999999999999999999999999999999999999999999999091999999999999999999409997650000000000000000000000000000000000000000000008244640000000000000010714442676000000000003481027730055225"), 102)
|
471
|
+
check_log_floated(LongDecimal("0.99999999999999999999999999999999999999999999999999999999999999999999993359999909094250000000000000000000000000000000000000000000000000000000440896012072283682638553830625"), 84)
|
472
|
+
check_log_floated(LongDecimal("1.0000000000000000000000000000000000000000009604500000000000000000000000730"), 46)
|
473
|
+
|
462
474
|
end
|
463
475
|
|
464
476
|
#
|
@@ -491,6 +503,96 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
491
503
|
check_power_floated(1.01, -1e-20, 20)
|
492
504
|
check_power_floated(1e-20, -1.01, 21)
|
493
505
|
check_power_floated(1.01, -1e-20, 21)
|
506
|
+
|
507
|
+
# random tests that have failed
|
508
|
+
check_power_floated(LongDecimal("1.000000000000000151000000000000000000000000000000000000000000000000000000000000057800000000205"),
|
509
|
+
LongDecimal("-680.0000000000000000000013100000000000000000000000000000000000000165000000000000000000234"),
|
510
|
+
26)
|
511
|
+
check_power_floated(LongDecimal("1.0000000000000000000000000000000000000000000068000000000853000000000926"),
|
512
|
+
LongDecimal("-536.000000000086100000000000000000000000000019200000000000000000000000000000000000000000000000166"),
|
513
|
+
49)
|
514
|
+
check_power_floated(LongDecimal("1.0000000000000000049000000000002090000000000447"),
|
515
|
+
LongDecimal("-328.00000000000000000000000000000000567000000000000000026600000000000000000000000679"),
|
516
|
+
24)
|
517
|
+
check_power_floated(LongDecimal("1.0000000000000000000003580000000000000000000000376238"),
|
518
|
+
LongDecimal("-359.0000000003910721000000000000000000000000000000000000000000000000000000000000000000000000479"),
|
519
|
+
39)
|
520
|
+
check_power_floated(LongDecimal("1.000000000000000000000032000000001500000000000000000000439"),
|
521
|
+
LongDecimal("-252.00000000000000025500000000000176907"),
|
522
|
+
39)
|
523
|
+
check_power_floated(LongDecimal("1.0000000000000008590000521000000000000621"),
|
524
|
+
LongDecimal("-135.0000000000000000000000000000000000000000000000000000000074400000000000000000000000000321"),
|
525
|
+
50)
|
526
|
+
check_power_floated(LongDecimal("1.000000000000000151000000000000000000000000000000000000000000000000000000000000057800000000205"),
|
527
|
+
LongDecimal("-680.0000000000000000000013100000000000000000000000000000000000000165000000000000000000234"),
|
528
|
+
26)
|
529
|
+
check_power_floated(LongDecimal("1.02350000000000000000000356000000000000000000000000000000000000000000000000000000000104"),
|
530
|
+
LongDecimal("-971.0000000000000000055400000000000000000000000000000000000000000000000000040900000000000000000000000603"),
|
531
|
+
45)
|
532
|
+
check_power_floated(LongDecimal("1.0023800000000000000000000000000000000000000000000000000000000000265000000000000000000000000000000453"),
|
533
|
+
LongDecimal("-277.000000000000000000000000000000000000000000000000000000000000113000000000000000000041400000294"),
|
534
|
+
22)
|
535
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003422250001093950095910422515315300670761"),
|
536
|
+
LongDecimal("-0.99999999999999999999999999999999999999999999999999997909999999999999999999999999667999957000000000000000065521500000000000000000000020816402696099999999999997719321110428280027729999999129874367303020000000000071412895105695789681563000036363932570289984431712381817869482773696988055442648559706239710901091550702341077381290973316336980640165855210736680"),
|
537
|
+
46)
|
538
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000049273899694369"),
|
539
|
+
LongDecimal("-0.99999999999999999999999999999999999999988899963450000000000000000000000000000001847988671170038537499999999999999999999658146648184996349480690906250000000000066400422857493760370353798820585648437488207957808220483456569835670219978619056054192244103752969215743872596800486621906638928959243058783356441503226136251748249991020724187893339868"),
|
540
|
+
40)
|
541
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000003868840000000000000000000328416000000000000000000006969600000000000000000000000000000059338800000000000000000002518560000000000000000000000000000000000000000000000000000000227529"),
|
542
|
+
LongDecimal("-0.999999999999999999999999999999999999999999999999999998264999999999999999999999999999616741000000000000000004515337500000000000000000000001994863094999999999999986943149282831191620999999999993077825060350000000000033980453035745280148525000000024019946927993617107497210600671335038418031107762499920991889855598841096454678838495791189026426859181655270271342"),
|
543
|
+
31)
|
544
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000435600000000000000000000000000000000000000000000000006204000000075240000000000000000000000000000000000000022090000000535800000003249"),
|
545
|
+
LongDecimal("-4.50377349099168904759987513420506734335755704389619751192197520413005925604849718759451665302464588879636922713303481423460050066204079523260315868192642742903330525895063299416"),
|
546
|
+
20)
|
547
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000700720943029391693947940220429504569709269190190365416713568"),
|
548
|
+
LongDecimal("-6.633249580710799698229865473341373367854177091179010213018664944871230"),
|
549
|
+
7)
|
550
|
+
check_power_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000816700000697"),
|
551
|
+
LongDecimal("-0.58685446009389671361502347417840375586854460093896713614906034406753510106019528753113359342280707917300359276157963863070992095386428055722936293804476401957909668625460628698383384886591034139"),
|
552
|
+
36)
|
553
|
+
check_power_floated(LongDecimal("0.000000000000000000000000000000000000046500000000000015087"),
|
554
|
+
LongDecimal("-1.0000000037300000000000000000000000000000000000000000003924"),
|
555
|
+
3)
|
556
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000002450257484405715360000000000000000097614149083200000000000000000000000972196"),
|
557
|
+
LongDecimal("-1.00000008600000184900000000000000000000000000000000000000012640000543520000000000000000000013300000571900000000000000399424000000000000000000000000000840560000000000000000000000000000442225"),
|
558
|
+
3)
|
559
|
+
check_power_floated(LongDecimal("0.00000000000000000000000000000000000000000000000000000000000000000000367236000000000000000093202800000000000000005914074196000000000000000058905400000000000000000000146689"),
|
560
|
+
LongDecimal("-1.000000000008800000000019360000000062800000000276320250000000001100000985960000000000007850000000000000015625"),
|
561
|
+
4)
|
562
|
+
check_power_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000000000000002777290000000006513720000000003819240000000000000000000000000000100340800000000117667200000000000000000000000000000000000000000000906304"),
|
563
|
+
LongDecimal("-0.5773502691896257645091447198050641552797247036332110311421498194545129249630222981047763195372146430879281215100223411775138874331819083544781222838698051829302865547075365868655847179043571799566074987574406310154782766513220296853158689786573196010629608653145605201822170964422894732870490642190250948498852022304300879727510280657218553"),
|
564
|
+
23)
|
565
|
+
check_power_floated(LongDecimal("0.000000000000000000000000000000000000000000007350000295000915"),
|
566
|
+
LongDecimal("-1.000002193000861"),
|
567
|
+
2)
|
568
|
+
check_power_floated(LongDecimal("0.0000000086862400000000000000015172960006039360000000662596000527472000104976"),
|
569
|
+
LongDecimal("-0.999999999999999999999999999999999999999999999999999999999997169999999999996784999999999687000000000000000000000000000012013350000000027295350000002672874337500003018885000000146896669625999999845508318999984783776699499965759759873248317316431267825611053489338193758007138415641516991908731376997678345955102618540146326218008264916981179817214058767402196571"),
|
570
|
+
11)
|
571
|
+
check_power_floated(LongDecimal("0.00000000000000000000000000624000383000000000000000000000000000000000000000000000358"),
|
572
|
+
LongDecimal("-1.0000004600000000000000000000000000000004210"),
|
573
|
+
3)
|
574
|
+
check_power_floated(LongDecimal("0.00000000006236994468492015585972291475115698519825552824875948893004062366348813472156776148562881057978611940708477498267201430163921921918813918304834563518614088250202460271818014152969"),
|
575
|
+
LongDecimal("-21.81742422927144044215775880732087497227530694228658299334049542576403906256739064739549866577137008231569804502022381108724983114382624747999460445291671084230968250529511708947428208082234"),
|
576
|
+
6)
|
577
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000000000000000000035600000000928000000000000000450"),
|
578
|
+
LongDecimal("-0.70821529745042492917661444999959874487397062785764977666003279651340417551441776107007487983685090756343178115766012078677210548592741818458068450268168492334992979756923"),
|
579
|
+
13)
|
580
|
+
check_power_floated(LongDecimal("0.0000000000000000000000000000025900000000000000000000000000000000000000000022100000000000000000032"),
|
581
|
+
LongDecimal("-0.999943403203378688766215832183174473300891276419706031790088430934495839737458766990116492"),
|
582
|
+
4)
|
583
|
+
check_power_floated(LongDecimal("0.002658925294303146195800785280451092866235470739838791730450519159432915"),
|
584
|
+
LongDecimal("-87.0000000000000008330000000000000000000000000000000000000000000000000000000000000000000000000092046"),
|
585
|
+
90)
|
586
|
+
check_power_floated(LongDecimal("0.0014814814814814814812905349794238683127818125285779606767229367555739725854802645575188374989810195213530274617178142875856830586369415448003164084698537116523550097"),
|
587
|
+
LongDecimal("-52.0000000000000000000000000000000000000000683000000000000000000238000000000228"),
|
588
|
+
25)
|
589
|
+
check_power_floated(LongDecimal("0.00000000000000000000047400000000000000000084700000892"),
|
590
|
+
LongDecimal("-17.000000001310000000000000000000000000000000000000000000000000002800000000000000217"),
|
591
|
+
56)
|
592
|
+
check_power_floated(LongDecimal("0.00000000000000000000005110000000000000000004800000000000000000000000000000163"),
|
593
|
+
LongDecimal("-37.000000009170000000000000000000000000000000000000000000000000000000000000055800048"),
|
594
|
+
21)
|
595
|
+
|
494
596
|
end
|
495
597
|
|
496
598
|
#
|
@@ -518,6 +620,13 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
518
620
|
check_log10_floated(LongDecimal("0.0000000000000000000000000000000000000000180000000063000000000000000000000000000000000025"), 74)
|
519
621
|
check_log10_floated(LongDecimal("0.0000000000000000000000000006200000000000000000000000000000000000000000000000007940000015"), 74)
|
520
622
|
check_log10_floated(LongDecimal("0.00000000000000000000000000000000000000000032900000000000000000000233000000000000000000000000000000254"), 10)
|
623
|
+
check_log10_floated(LongDecimal("0.00000000000000000000000233000000094800000000000000000000000000000000000000000000000000000000000000682"), 100)
|
624
|
+
check_log10_floated(LongDecimal("0.000000000000000000000000000000000000097000000041500000000000000000784"), 97)
|
625
|
+
check_log10_floated(LongDecimal("185.000025300000000000000006320000000000000000000000000000737"), 27)
|
626
|
+
check_log10_floated(LongDecimal("0.00000000000000000000000000000302000000000000000000000000000000000000000000000000000000060673"), 100)
|
627
|
+
check_log10_floated(LongDecimal("442.000000000000045300000000000000000000000000000000000000000000000000000000000000000000000721000000000752"), 97)
|
628
|
+
check_log10_floated(LongDecimal("0.001030927835051546391752577284408545010096715910298651428936221023301883588097777204212461151695109779555577162172"), 62)
|
629
|
+
|
521
630
|
end
|
522
631
|
|
523
632
|
#
|
@@ -544,6 +653,37 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
544
653
|
check_log2_floated(LongDecimal("504.00000000000000000000000000000000000000000000000000000000000000000000000000000000000327400000000000828"), 1)
|
545
654
|
check_log2_floated(LongDecimal("0.0033222591362126245847176079734219269102990032888157967351353737817463383406363175903135730345286354858609181999523961456225622835123748782987926188031081"), 48)
|
546
655
|
check_log2_floated(LongDecimal("0.000802000000000000000000197000000000000000000000302"), 84)
|
656
|
+
check_log2_floated(LongDecimal("0.00000000000000000000000000000000000000000000000000000000000000000000000452000000000069480"), 3)
|
657
|
+
check_log2_floated(LongDecimal("0.0000000000000000000000000000000000000000000000000000930000000000000000000000000983000000000000300"), 61)
|
658
|
+
check_log2_floated(LongDecimal("0.000000000000000000000000000000000000000000000000000000000086000133000000000000000000000000947"), 106)
|
659
|
+
check_log2_floated(LongDecimal("0.00000000000000000000000000000276000000000000000000000000000000000008560000000000000000000000000000161"), 81)
|
660
|
+
|
661
|
+
end
|
662
|
+
|
663
|
+
#
|
664
|
+
# test the calculation of the base-x-logarithm of sqrt(x)
|
665
|
+
#
|
666
|
+
def test_log_of_sqrt
|
667
|
+
# n = 125
|
668
|
+
n = 30
|
669
|
+
m = 5
|
670
|
+
xe = LongMath.sqrt(LongMath.exp(1, 2*n), n)
|
671
|
+
x2 = LongMath.sqrt(2, n)
|
672
|
+
x10 = LongMath.sqrt(10, n)
|
673
|
+
|
674
|
+
(2*m).times do |i|
|
675
|
+
check_log_floated(xe, n+m-i)
|
676
|
+
check_log2_floated(x2, n+m-i)
|
677
|
+
check_log10_floated(x10, n+m-i)
|
678
|
+
end
|
679
|
+
|
680
|
+
ye = check_log_floated(xe, n)
|
681
|
+
assert((ye*2).one?, "xe=#{xe} ye=#{ye}")
|
682
|
+
y2 = check_log2_floated(x2, n)
|
683
|
+
assert((y2*2).one?, "xe=#{x2} ye=#{y2}")
|
684
|
+
y10 = check_log10_floated(x10, n)
|
685
|
+
assert((y10*2).one?, "xe=#{x10} ye=#{y10}")
|
686
|
+
|
547
687
|
end
|
548
688
|
|
549
689
|
|
@@ -1067,6 +1207,33 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
1067
1207
|
assert_equal(4, LongMath.int_digits10(9999), "9999")
|
1068
1208
|
end
|
1069
1209
|
|
1210
|
+
#
|
1211
|
+
# test LongMath.multiplicity_of_10(n)
|
1212
|
+
#
|
1213
|
+
def test_lm_multiplicity_of_10
|
1214
|
+
assert_equal(0, LongMath.multiplicity_of_10(-999), "-999")
|
1215
|
+
assert_equal(0, LongMath.multiplicity_of_10(-1), "-1")
|
1216
|
+
assert_equal(0, LongMath.multiplicity_of_10(-5), "-5")
|
1217
|
+
assert_equal(0, LongMath.multiplicity_of_10(1), "1")
|
1218
|
+
assert_equal(0, LongMath.multiplicity_of_10(2), "2")
|
1219
|
+
assert_equal(0, LongMath.multiplicity_of_10(8), "8")
|
1220
|
+
assert_equal(0, LongMath.multiplicity_of_10(1024), "1024")
|
1221
|
+
assert_equal(0, LongMath.multiplicity_of_10(5), "5")
|
1222
|
+
assert_equal(0, LongMath.multiplicity_of_10(625), "625")
|
1223
|
+
assert_equal(1, LongMath.multiplicity_of_10(-1230), "-1230")
|
1224
|
+
10.times do |i|
|
1225
|
+
n = i*i+i+1
|
1226
|
+
while (n % 10) == 0 do
|
1227
|
+
n /= 10
|
1228
|
+
end
|
1229
|
+
10.times do |j|
|
1230
|
+
m = j*j
|
1231
|
+
x = n * 10**m
|
1232
|
+
assert_equal(m, LongMath.multiplicity_of_10(x), "x=#{x} i=#{i} j=#{j} n=#{n} m=#{m}")
|
1233
|
+
end
|
1234
|
+
end
|
1235
|
+
end
|
1236
|
+
|
1070
1237
|
#
|
1071
1238
|
# test round_trailing_zeros of LongDecimal
|
1072
1239
|
#
|
@@ -1530,6 +1697,16 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
1530
1697
|
assert((l.to_f - 0.224).abs < 0.224 * 0.000001, "l=#{l.inspect}")
|
1531
1698
|
l = LongDecimal(224, 4)
|
1532
1699
|
assert((l.to_f - 0.0224).abs < 0.0224 * 0.000001, "l=#{l.inspect}")
|
1700
|
+
|
1701
|
+
l = LongDecimal("0." + ("0" * 30) + "1" + ("0" * 500))
|
1702
|
+
assert((l.to_f - 1e-31).abs < 1e-32, "l=#{l.inspect}=#{l.to_s}=#{l.to_f}=#{l.to_s.to_f}")
|
1703
|
+
l = LongDecimal("0." + ("0" * 200) + "1" + ("0" * 500))
|
1704
|
+
assert((l.to_f - 1e-201).abs < 1e-202, "l=#{l.inspect}=#{l.to_s}=#{l.to_f}=#{l.to_s.to_f}")
|
1705
|
+
l = LongDecimal("0." + ("0" * 280) + "1" + ("0" * 500))
|
1706
|
+
assert((l.to_f - 1e-281).abs < 1e-282, "l=#{l.inspect}=#{l.to_s}=#{l.to_f}=#{l.to_s.to_f}")
|
1707
|
+
|
1708
|
+
l = LongDecimal("0.00000000000000000000000000000000000000000000000000002090000000000000000000000000332000042999999999999999934478499999999999999999999979183597303900000000000002280678889571719972270000000870125632696979999999999928587104894304210318436999963636067429710015568287618182130517226303011944557351440293760289098908449297658922618709026683663019359834144789263320")
|
1709
|
+
assert((l.to_f - 0.0000000000000000000000000000000000000000000000000000209).abs < 1e-60, "l=#{l.inspect}")
|
1533
1710
|
end
|
1534
1711
|
|
1535
1712
|
#
|
@@ -2101,6 +2278,498 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2101
2278
|
|
2102
2279
|
end
|
2103
2280
|
|
2281
|
+
#
|
2282
|
+
# test division of LongDecimal
|
2283
|
+
#
|
2284
|
+
def test_divide
|
2285
|
+
x = LongDecimal(224, 2) # 2.24 dx=1 sx=2
|
2286
|
+
|
2287
|
+
y = LongDecimal(3, 1) # 0.3 dy=0 sy=1
|
2288
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -3 -> use 0
|
2289
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2290
|
+
zz = Rational(224, 30).to_ld(0, LongMath::ROUND_DOWN)
|
2291
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2292
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2293
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2294
|
+
zz = Rational(224, 30).to_ld(0, LongMath::ROUND_UP)
|
2295
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2296
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2297
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
|
2298
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2299
|
+
zz = Rational(30, 224).to_ld(0, LongMath::ROUND_DOWN)
|
2300
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2301
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2302
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2303
|
+
zz = Rational(30, 224).to_ld(0, LongMath::ROUND_UP)
|
2304
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2305
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2306
|
+
|
2307
|
+
# x= 2.24 dx=1 sx=2
|
2308
|
+
y = LongDecimal(30000000, 8) # 0.30000000 dy=0 sy=8
|
2309
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -1 -> use 0
|
2310
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2311
|
+
zz = Rational(224, 30).to_ld(0, LongMath::ROUND_DOWN)
|
2312
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2313
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2314
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2315
|
+
zz = Rational(224, 30).to_ld(0, LongMath::ROUND_UP)
|
2316
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2317
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2318
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 1
|
2319
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2320
|
+
zz = Rational(30, 224).to_ld(1, LongMath::ROUND_DOWN)
|
2321
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2322
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2323
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2324
|
+
zz = Rational(30, 224).to_ld(1, LongMath::ROUND_UP)
|
2325
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2326
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2327
|
+
|
2328
|
+
# x= 2.24 dx=1 sx=2
|
2329
|
+
y = LongDecimal(3, 4) # 0.0003 dy=-4 sy=4
|
2330
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -8 -> use 0
|
2331
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2332
|
+
zz = Rational(22400, 3).to_ld(0, LongMath::ROUND_DOWN)
|
2333
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2334
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2335
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2336
|
+
zz = Rational(22400, 3).to_ld(0, LongMath::ROUND_UP)
|
2337
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2338
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2339
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 2
|
2340
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2341
|
+
zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_DOWN)
|
2342
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2343
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2344
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2345
|
+
zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_UP)
|
2346
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2347
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2348
|
+
|
2349
|
+
# x= 2.24 dx=1 sx=2
|
2350
|
+
y = LongDecimal(3333, 2) # 33.33 dy=2 sy=2
|
2351
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
|
2352
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2353
|
+
zz = Rational(224, 3333).to_ld(1, LongMath::ROUND_DOWN)
|
2354
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2355
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2356
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2357
|
+
zz = Rational(224, 3333).to_ld(1, LongMath::ROUND_UP)
|
2358
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2359
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2360
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
|
2361
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2362
|
+
zz = Rational(3333, 224).to_ld(0, LongMath::ROUND_DOWN)
|
2363
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2364
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2365
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2366
|
+
zz = Rational(3333, 224).to_ld(0, LongMath::ROUND_UP)
|
2367
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2368
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2369
|
+
|
2370
|
+
# x= 2.24 dx=1 sx=2
|
2371
|
+
y = LongDecimal(33333, 2) # 333.33 dy=3 sy=2
|
2372
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 2
|
2373
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2374
|
+
zz = Rational(224, 33333).to_ld(2, LongMath::ROUND_DOWN)
|
2375
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2376
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2377
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2378
|
+
zz = Rational(224, 33333).to_ld(2, LongMath::ROUND_UP)
|
2379
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2380
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2381
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
|
2382
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2383
|
+
zz = Rational(33333, 224).to_ld(0, LongMath::ROUND_DOWN)
|
2384
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2385
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2386
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2387
|
+
zz = Rational(33333, 224).to_ld(0, LongMath::ROUND_UP)
|
2388
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2389
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2390
|
+
|
2391
|
+
# x= 2.24 dx=1 sx=2
|
2392
|
+
y = LongDecimal(33333, 3) # 33.333 dy=2 sy=3
|
2393
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
|
2394
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2395
|
+
zz = Rational(2240, 33333).to_ld(1, LongMath::ROUND_DOWN)
|
2396
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2397
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2398
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2399
|
+
zz = Rational(2240, 33333).to_ld(1, LongMath::ROUND_UP)
|
2400
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2401
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2402
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
|
2403
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2404
|
+
zz = Rational(33333, 2240).to_ld(0, LongMath::ROUND_DOWN)
|
2405
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2406
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2407
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2408
|
+
zz = Rational(33333, 2240).to_ld(0, LongMath::ROUND_UP)
|
2409
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2410
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2411
|
+
|
2412
|
+
# x= 2.24 dx=1 sx=2
|
2413
|
+
y = LongDecimal(3333, 3) # 3.333 dy=1 sy=3
|
2414
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
|
2415
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2416
|
+
zz = Rational(2240, 3333).to_ld(0, LongMath::ROUND_DOWN)
|
2417
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2418
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2419
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2420
|
+
zz = Rational(2240, 3333).to_ld(0, LongMath::ROUND_UP)
|
2421
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2422
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2423
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
|
2424
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2425
|
+
zz = Rational(3333, 2240).to_ld(0, LongMath::ROUND_DOWN)
|
2426
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2427
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2428
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2429
|
+
zz = Rational(3333, 2240).to_ld(0, LongMath::ROUND_UP)
|
2430
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2431
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2432
|
+
|
2433
|
+
# x= 2.24 dx=1 sx=2
|
2434
|
+
y = LongDecimal(123456789, 3) # 123456.789 dy=6 sy=3
|
2435
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 5
|
2436
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2437
|
+
zz = Rational(2240, 123456789).to_ld(5, LongMath::ROUND_DOWN)
|
2438
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2439
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2440
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2441
|
+
zz = Rational(2240, 123456789).to_ld(5, LongMath::ROUND_UP)
|
2442
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2443
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2444
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -5 -> use 0
|
2445
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2446
|
+
zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_DOWN)
|
2447
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2448
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2449
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2450
|
+
zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_UP)
|
2451
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2452
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2453
|
+
|
2454
|
+
# x= 2.24 dx=1 sx=2
|
2455
|
+
y = 5.to_ld # 5 dy=1 sy=0
|
2456
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = -2 -> use 0
|
2457
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2458
|
+
zz = Rational(224, 500).to_ld(0, LongMath::ROUND_DOWN)
|
2459
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2460
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2461
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2462
|
+
zz = Rational(224, 500).to_ld(0, LongMath::ROUND_UP)
|
2463
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2464
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2465
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
|
2466
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2467
|
+
zz = Rational(500, 224).to_ld(0, LongMath::ROUND_DOWN)
|
2468
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2469
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2470
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2471
|
+
zz = Rational(500, 224).to_ld(0, LongMath::ROUND_UP)
|
2472
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2473
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2474
|
+
|
2475
|
+
# x= 2.24 dx=1 sx=2
|
2476
|
+
y = 5.001.to_ld # dy=1 sy=3
|
2477
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
|
2478
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2479
|
+
zz = Rational(224, 500).to_ld(0, LongMath::ROUND_DOWN)
|
2480
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2481
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2482
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2483
|
+
zz = Rational(224, 500).to_ld(0, LongMath::ROUND_UP)
|
2484
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2485
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2486
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
|
2487
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2488
|
+
zz = Rational(500, 224).to_ld(0, LongMath::ROUND_DOWN)
|
2489
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2490
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2491
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2492
|
+
zz = Rational(500, 224).to_ld(0, LongMath::ROUND_UP)
|
2493
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2494
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2495
|
+
|
2496
|
+
y = Rational(5, 3).to_ld
|
2497
|
+
# y is has no scale, use scale of x
|
2498
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2499
|
+
zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_DOWN)
|
2500
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2501
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2502
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2503
|
+
zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_UP)
|
2504
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2505
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2506
|
+
# y is has no scale, use scale of x
|
2507
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2508
|
+
zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_DOWN)
|
2509
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2510
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2511
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2512
|
+
zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_UP)
|
2513
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2514
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2515
|
+
|
2516
|
+
y = LongDecimalQuot(Rational(5, 3), 3).to_ld
|
2517
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2518
|
+
zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_DOWN)
|
2519
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2520
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2521
|
+
z = x.divide(y, LongMath::ROUND_UP)
|
2522
|
+
zz = Rational(224*3, 500).to_ld(0, LongMath::ROUND_UP)
|
2523
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2524
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2525
|
+
z = y.divide(x, LongMath::ROUND_DOWN)
|
2526
|
+
zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_DOWN)
|
2527
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2528
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2529
|
+
z = y.divide(x, LongMath::ROUND_UP)
|
2530
|
+
zz = Rational(500, 224*3).to_ld(0, LongMath::ROUND_UP)
|
2531
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2532
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2533
|
+
|
2534
|
+
y = Complex(5, 3)
|
2535
|
+
z = x.divide(y, LongMath::ROUND_DOWN)
|
2536
|
+
zz = 2.24 / Complex(5, 3)
|
2537
|
+
assert_kind_of(Complex, z, "z=#{z.inspect}")
|
2538
|
+
assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
|
2539
|
+
|
2540
|
+
end # test_divide
|
2541
|
+
|
2542
|
+
#
|
2543
|
+
# test division of LongDecimal
|
2544
|
+
#
|
2545
|
+
def test_divide_s
|
2546
|
+
x = LongDecimal(224, 2) # 2.24
|
2547
|
+
|
2548
|
+
y = LongDecimal(3, 1) # 0.3
|
2549
|
+
z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
|
2550
|
+
zz = Rational(224, 30).to_ld(1, LongMath::ROUND_DOWN)
|
2551
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2552
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2553
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2554
|
+
zz = Rational(224, 30).to_ld(1, LongMath::ROUND_UP)
|
2555
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2556
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2557
|
+
z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
|
2558
|
+
zz = Rational(30, 224).to_ld(1, LongMath::ROUND_DOWN)
|
2559
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2560
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2561
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2562
|
+
zz = Rational(30, 224).to_ld(1, LongMath::ROUND_UP)
|
2563
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2564
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2565
|
+
|
2566
|
+
y = LongDecimal(30000000, 8) # 0.30000000
|
2567
|
+
z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
|
2568
|
+
zz = Rational(224, 30).to_ld(1, LongMath::ROUND_DOWN)
|
2569
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2570
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2571
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2572
|
+
zz = Rational(224, 30).to_ld(1, LongMath::ROUND_UP)
|
2573
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2574
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2575
|
+
z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
|
2576
|
+
zz = Rational(30, 224).to_ld(2, LongMath::ROUND_DOWN)
|
2577
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2578
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2579
|
+
z = y.divide_s(x, 20, LongMath::ROUND_UP)
|
2580
|
+
zz = Rational(30, 224).to_ld(20, LongMath::ROUND_UP)
|
2581
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2582
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2583
|
+
|
2584
|
+
y = LongDecimal(3, 4) # 0.0003
|
2585
|
+
z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
|
2586
|
+
zz = Rational(22400, 3).to_ld(2, LongMath::ROUND_DOWN)
|
2587
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2588
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2589
|
+
z = x.divide_s(y, 2, LongMath::ROUND_UP)
|
2590
|
+
zz = Rational(22400, 3).to_ld(2, LongMath::ROUND_UP)
|
2591
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2592
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2593
|
+
z = y.divide_s(x, 3, LongMath::ROUND_DOWN)
|
2594
|
+
zz = Rational(3, 22400).to_ld(3, LongMath::ROUND_DOWN)
|
2595
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2596
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2597
|
+
z = y.divide_s(x, 2, LongMath::ROUND_UP)
|
2598
|
+
zz = Rational(3, 22400).to_ld(2, LongMath::ROUND_UP)
|
2599
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2600
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2601
|
+
|
2602
|
+
y = LongDecimal(3333, 2) # 33.33
|
2603
|
+
z = x.divide_s(y, 4, LongMath::ROUND_DOWN)
|
2604
|
+
zz = Rational(224, 3333).to_ld(4, LongMath::ROUND_DOWN)
|
2605
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2606
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2607
|
+
z = x.divide_s(y, 30, LongMath::ROUND_UP)
|
2608
|
+
zz = Rational(224, 3333).to_ld(30, LongMath::ROUND_UP)
|
2609
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2610
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2611
|
+
z = y.divide_s(x, 4, LongMath::ROUND_DOWN)
|
2612
|
+
zz = Rational(3333, 224).to_ld(4, LongMath::ROUND_DOWN)
|
2613
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2614
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2615
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2616
|
+
zz = Rational(3333, 224).to_ld(1, LongMath::ROUND_UP)
|
2617
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2618
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2619
|
+
|
2620
|
+
y = LongDecimal(33333, 2) # 333.33
|
2621
|
+
z = x.divide_s(y, 3, LongMath::ROUND_DOWN)
|
2622
|
+
zz = Rational(224, 33333).to_ld(3, LongMath::ROUND_DOWN)
|
2623
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2624
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2625
|
+
z = x.divide_s(y, 3, LongMath::ROUND_UP)
|
2626
|
+
zz = Rational(224, 33333).to_ld(3, LongMath::ROUND_UP)
|
2627
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2628
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2629
|
+
z = y.divide_s(x, 33, LongMath::ROUND_DOWN)
|
2630
|
+
zz = Rational(33333, 224).to_ld(33, LongMath::ROUND_DOWN)
|
2631
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2632
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2633
|
+
z = y.divide_s(x, 4, LongMath::ROUND_UP)
|
2634
|
+
zz = Rational(33333, 224).to_ld(4, LongMath::ROUND_UP)
|
2635
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2636
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2637
|
+
|
2638
|
+
y = LongDecimal(33333, 3) # 33.333
|
2639
|
+
z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
|
2640
|
+
zz = Rational(2240, 33333).to_ld(2, LongMath::ROUND_DOWN)
|
2641
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2642
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2643
|
+
z = x.divide_s(y, 2, LongMath::ROUND_UP)
|
2644
|
+
zz = Rational(2240, 33333).to_ld(2, LongMath::ROUND_UP)
|
2645
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2646
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2647
|
+
z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
|
2648
|
+
zz = Rational(33333, 2240).to_ld(2, LongMath::ROUND_DOWN)
|
2649
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2650
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2651
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2652
|
+
zz = Rational(33333, 2240).to_ld(1, LongMath::ROUND_UP)
|
2653
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2654
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2655
|
+
|
2656
|
+
y = LongDecimal(3333, 3) # 3.333
|
2657
|
+
z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
|
2658
|
+
zz = Rational(2240, 3333).to_ld(1, LongMath::ROUND_DOWN)
|
2659
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2660
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2661
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2662
|
+
zz = Rational(2240, 3333).to_ld(1, LongMath::ROUND_UP)
|
2663
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2664
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2665
|
+
z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
|
2666
|
+
zz = Rational(3333, 2240).to_ld(1, LongMath::ROUND_DOWN)
|
2667
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2668
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2669
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2670
|
+
zz = Rational(3333, 2240).to_ld(1, LongMath::ROUND_UP)
|
2671
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2672
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2673
|
+
|
2674
|
+
y = LongDecimal(123456789, 3) # 123456.789
|
2675
|
+
z = x.divide_s(y, 3, LongMath::ROUND_DOWN)
|
2676
|
+
zz = Rational(2240, 123456789).to_ld(3, LongMath::ROUND_DOWN)
|
2677
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2678
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2679
|
+
z = x.divide_s(y, 7, LongMath::ROUND_UP)
|
2680
|
+
zz = Rational(2240, 123456789).to_ld(7, LongMath::ROUND_UP)
|
2681
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2682
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2683
|
+
z = y.divide_s(x, 0, LongMath::ROUND_DOWN)
|
2684
|
+
zz = Rational(123456789, 2240).to_ld(0, LongMath::ROUND_DOWN)
|
2685
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2686
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2687
|
+
z = y.divide_s(x, 9, LongMath::ROUND_UP)
|
2688
|
+
zz = Rational(123456789, 2240).to_ld(9, LongMath::ROUND_UP)
|
2689
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2690
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2691
|
+
|
2692
|
+
y = 5.to_ld # 5
|
2693
|
+
z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
|
2694
|
+
zz = Rational(224, 500).to_ld(1, LongMath::ROUND_DOWN)
|
2695
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2696
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2697
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2698
|
+
zz = Rational(224, 500).to_ld(1, LongMath::ROUND_UP)
|
2699
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2700
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2701
|
+
z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
|
2702
|
+
zz = Rational(500, 224).to_ld(1, LongMath::ROUND_DOWN)
|
2703
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2704
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2705
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2706
|
+
zz = Rational(500, 224).to_ld(1, LongMath::ROUND_UP)
|
2707
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2708
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2709
|
+
|
2710
|
+
y = 5.001.to_ld # 5.001
|
2711
|
+
z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
|
2712
|
+
zz = Rational(224, 500).to_ld(1, LongMath::ROUND_DOWN)
|
2713
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2714
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2715
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2716
|
+
zz = Rational(224, 500).to_ld(1, LongMath::ROUND_UP)
|
2717
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2718
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2719
|
+
z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
|
2720
|
+
zz = Rational(500, 224).to_ld(1, LongMath::ROUND_DOWN)
|
2721
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2722
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2723
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2724
|
+
zz = Rational(500, 224).to_ld(1, LongMath::ROUND_UP)
|
2725
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2726
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2727
|
+
|
2728
|
+
y = Rational(5, 3).to_ld(3) # 1.667
|
2729
|
+
z = x.divide_s(y, 4, LongMath::ROUND_DOWN)
|
2730
|
+
zz = Rational(2240, 1667).to_ld(4, LongMath::ROUND_DOWN)
|
2731
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2732
|
+
assert_equal(zz, z, "x=#{x} y=#{y} z=#{z} z=#{z.inspect}")
|
2733
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2734
|
+
zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_UP)
|
2735
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2736
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2737
|
+
# y is has no scale, use scale of x
|
2738
|
+
z = y.divide_s(x, 1, LongMath::ROUND_DOWN)
|
2739
|
+
zz = Rational(1667, 2240).to_ld(1, LongMath::ROUND_DOWN)
|
2740
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2741
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2742
|
+
z = y.divide_s(x, 1, LongMath::ROUND_UP)
|
2743
|
+
zz = Rational(1667, 2240).to_ld(1, LongMath::ROUND_UP)
|
2744
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2745
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2746
|
+
|
2747
|
+
y = LongDecimalQuot(Rational(5, 3), 3).to_ld
|
2748
|
+
z = x.divide_s(y, 1, LongMath::ROUND_DOWN)
|
2749
|
+
zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_DOWN)
|
2750
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2751
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2752
|
+
z = x.divide_s(y, 1, LongMath::ROUND_UP)
|
2753
|
+
zz = Rational(2240, 1667).to_ld(1, LongMath::ROUND_UP)
|
2754
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2755
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2756
|
+
z = y.divide_s(x, 2, LongMath::ROUND_DOWN)
|
2757
|
+
zz = Rational(1667, 2240).to_ld(2, LongMath::ROUND_DOWN)
|
2758
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2759
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2760
|
+
z = y.divide_s(x, 224, LongMath::ROUND_UP)
|
2761
|
+
zz = Rational(1667, 2240).to_ld(224, LongMath::ROUND_UP)
|
2762
|
+
assert_kind_of(LongDecimal, z, "z=#{z.inspect}")
|
2763
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2764
|
+
|
2765
|
+
y = Complex(5, 3)
|
2766
|
+
z = x.divide_s(y, 2, LongMath::ROUND_DOWN)
|
2767
|
+
zz = 2.24 / Complex(5, 3)
|
2768
|
+
assert_kind_of(Complex, z, "z=#{z.inspect}")
|
2769
|
+
assert((zz-z).abs < 1e-9, "z=#{z.inspect}")
|
2770
|
+
|
2771
|
+
end # test_divide_s
|
2772
|
+
|
2104
2773
|
#
|
2105
2774
|
# test square of LongDecimal
|
2106
2775
|
#
|
@@ -2951,7 +3620,7 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2951
3620
|
end
|
2952
3621
|
|
2953
3622
|
#
|
2954
|
-
# test
|
3623
|
+
# test unit() of LongDecimal
|
2955
3624
|
#
|
2956
3625
|
def test_unit
|
2957
3626
|
10.times do |i|
|
@@ -2959,9 +3628,39 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2959
3628
|
u = x.unit
|
2960
3629
|
v = LongDecimal(1, i)
|
2961
3630
|
assert_equal(u, v, "unit i=#{i}")
|
2962
|
-
|
3631
|
+
n = i*i
|
3632
|
+
x = i.to_ld(n)
|
2963
3633
|
u = x.unit
|
2964
|
-
v = LongDecimal(1,
|
3634
|
+
v = LongDecimal(1, n)
|
3635
|
+
assert_equal(u, v, "unit i=#{i}")
|
3636
|
+
n = i*i+i
|
3637
|
+
x = (-i).to_ld(n)
|
3638
|
+
u = x.unit
|
3639
|
+
v = LongDecimal(1, n)
|
3640
|
+
assert_equal(u, v, "unit i=#{i}")
|
3641
|
+
end
|
3642
|
+
end
|
3643
|
+
|
3644
|
+
#
|
3645
|
+
# test sunit() of LongDecimal
|
3646
|
+
#
|
3647
|
+
def test_sunit
|
3648
|
+
10.times do |i|
|
3649
|
+
x = LongDecimal.zero!(i)
|
3650
|
+
u = x.sunit
|
3651
|
+
v = LongDecimal(0, i)
|
3652
|
+
assert_equal(u, v, "unit i=#{i}")
|
3653
|
+
n = i*i
|
3654
|
+
k = 2*i+1
|
3655
|
+
x = k.to_ld(n)
|
3656
|
+
u = x.sunit
|
3657
|
+
v = LongDecimal(1, n)
|
3658
|
+
assert_equal(u, v, "unit i=#{i}")
|
3659
|
+
n = i*i+i
|
3660
|
+
k = -2*i-1
|
3661
|
+
x = k.to_ld(n)
|
3662
|
+
u = x.sunit
|
3663
|
+
v = LongDecimal(-1, n)
|
2965
3664
|
assert_equal(u, v, "unit i=#{i}")
|
2966
3665
|
end
|
2967
3666
|
end
|
@@ -4155,21 +4854,37 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
4155
4854
|
assert_equal(x, x, "x equals x")
|
4156
4855
|
assert_equal(y, y, "y equals y")
|
4157
4856
|
end
|
4158
|
-
|
4159
|
-
#
|
4160
|
-
# test
|
4161
|
-
#
|
4162
|
-
def
|
4163
|
-
assert_equal(LongMath::ROUND_UP, LongMath::ROUND_DOWN.
|
4164
|
-
assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_UP.
|
4165
|
-
assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.
|
4166
|
-
assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.
|
4167
|
-
assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_DOWN.
|
4168
|
-
assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_UP.
|
4169
|
-
assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.
|
4170
|
-
assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.
|
4171
|
-
assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.
|
4172
|
-
assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.
|
4857
|
+
|
4858
|
+
#
|
4859
|
+
# test mul minverse of RoundingMode
|
4860
|
+
#
|
4861
|
+
def test_rm_minverse
|
4862
|
+
assert_equal(LongMath::ROUND_UP, LongMath::ROUND_DOWN.minverse)
|
4863
|
+
assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_UP.minverse)
|
4864
|
+
assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.minverse)
|
4865
|
+
assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.minverse)
|
4866
|
+
assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_DOWN.minverse)
|
4867
|
+
assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_UP.minverse)
|
4868
|
+
assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.minverse)
|
4869
|
+
assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.minverse)
|
4870
|
+
assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.minverse)
|
4871
|
+
assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.minverse)
|
4872
|
+
end
|
4873
|
+
|
4874
|
+
#
|
4875
|
+
# test ainverse of RoundingMode
|
4876
|
+
#
|
4877
|
+
def test_rm_ainverse
|
4878
|
+
assert_equal(LongMath::ROUND_UP, LongMath::ROUND_UP.ainverse)
|
4879
|
+
assert_equal(LongMath::ROUND_DOWN, LongMath::ROUND_DOWN.ainverse)
|
4880
|
+
assert_equal(LongMath::ROUND_CEILING, LongMath::ROUND_FLOOR.ainverse)
|
4881
|
+
assert_equal(LongMath::ROUND_FLOOR, LongMath::ROUND_CEILING.ainverse)
|
4882
|
+
assert_equal(LongMath::ROUND_HALF_UP, LongMath::ROUND_HALF_UP.ainverse)
|
4883
|
+
assert_equal(LongMath::ROUND_HALF_DOWN, LongMath::ROUND_HALF_DOWN.ainverse)
|
4884
|
+
assert_equal(LongMath::ROUND_HALF_CEILING, LongMath::ROUND_HALF_FLOOR.ainverse)
|
4885
|
+
assert_equal(LongMath::ROUND_HALF_FLOOR, LongMath::ROUND_HALF_CEILING.ainverse)
|
4886
|
+
assert_equal(LongMath::ROUND_HALF_EVEN, LongMath::ROUND_HALF_EVEN.ainverse)
|
4887
|
+
assert_equal(LongMath::ROUND_UNNECESSARY, LongMath::ROUND_UNNECESSARY.ainverse)
|
4173
4888
|
end
|
4174
4889
|
|
4175
4890
|
|