long-decimal 0.00.20 → 0.00.21
Sign up to get free protection for your applications and to get access to all the features.
- data/README +32 -31
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/classes/LongDecimal.src/M000088.html +1 -1
- data/doc/classes/LongDecimal.src/M000089.html +1 -1
- data/doc/classes/LongDecimal.src/M000090.html +1 -1
- data/doc/classes/LongDecimal.src/M000091.html +1 -1
- data/doc/classes/LongDecimal.src/M000092.html +1 -1
- data/doc/classes/LongDecimal.src/M000093.html +1 -1
- data/doc/classes/LongDecimal.src/M000096.html +1 -1
- data/doc/classes/LongDecimal.src/M000097.html +1 -1
- data/doc/classes/LongDecimal.src/M000098.html +1 -1
- data/doc/classes/LongDecimal.src/M000099.html +1 -1
- data/doc/classes/LongDecimal.src/M000100.html +1 -1
- data/doc/classes/LongDecimal.src/M000101.html +1 -1
- data/doc/classes/LongDecimalBase.html +53 -53
- data/doc/classes/LongDecimalBase.src/M000105.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000106.html +4 -4
- data/doc/classes/LongDecimalBase.src/M000107.html +4 -4
- 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 -9
- data/doc/classes/LongDecimalBase.src/M000113.html +9 -5
- data/doc/classes/LongDecimalBase.src/M000114.html +5 -4
- 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 +1 -1
- 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/M000032.html +1 -1
- data/doc/classes/LongDecimalQuot.src/M000033.html +1 -1
- data/doc/classes/LongDecimalRoundingMode/RoundingModeClass.html +10 -10
- data/doc/classes/LongMath.html +170 -151
- data/doc/classes/LongMath.src/M000116.html +5 -4
- data/doc/classes/LongMath.src/M000117.html +4 -4
- data/doc/classes/LongMath.src/M000118.html +4 -5
- data/doc/classes/LongMath.src/M000119.html +5 -4
- data/doc/classes/LongMath.src/M000120.html +4 -18
- data/doc/classes/LongMath.src/M000121.html +14 -14
- data/doc/classes/LongMath.src/M000122.html +18 -5
- data/doc/classes/LongMath.src/M000123.html +5 -29
- data/doc/classes/LongMath.src/M000124.html +29 -5
- data/doc/classes/LongMath.src/M000125.html +5 -56
- data/doc/classes/LongMath.src/M000126.html +55 -19
- data/doc/classes/LongMath.src/M000127.html +20 -35
- data/doc/classes/LongMath.src/M000128.html +36 -6
- data/doc/classes/LongMath.src/M000129.html +6 -33
- data/doc/classes/LongMath.src/M000130.html +26 -41
- data/doc/classes/LongMath.src/M000131.html +46 -6
- data/doc/classes/LongMath.src/M000132.html +8 -4
- data/doc/classes/LongMath.src/M000133.html +4 -4
- data/doc/classes/LongMath.src/M000134.html +4 -64
- data/doc/classes/LongMath.src/M000135.html +59 -38
- data/doc/classes/LongMath.src/M000136.html +41 -8
- data/doc/classes/LongMath.src/M000137.html +4 -7
- data/doc/classes/LongMath.src/M000138.html +4 -20
- data/doc/classes/LongMath.src/M000139.html +4 -17
- data/doc/classes/LongMath.src/M000140.html +11 -34
- data/doc/classes/LongMath.src/M000141.html +14 -199
- data/doc/classes/LongMath.src/M000142.html +40 -16
- data/doc/classes/LongMath.src/M000143.html +211 -8
- data/doc/classes/LongMath.src/M000144.html +16 -41
- data/doc/classes/LongMath/CacheKey.html +5 -5
- data/doc/classes/Numeric.html +18 -0
- data/doc/classes/Numeric.src/M000102.html +1 -1
- data/doc/classes/Rational.html +5 -5
- 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 +61 -59
- data/lib/long-decimal.rb +173 -80
- data/test/testlongdecimal.rb +258 -58
- metadata +2 -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.28 2006/04/05 23:33:54 bk1 Exp $
|
6
|
+
# CVS-Label: $Name: PRE_ALPHA_0_21 $
|
7
7
|
# Author: $Author: bk1 $ (Karl Brodowsky)
|
8
8
|
#
|
9
9
|
|
@@ -18,17 +18,17 @@ load "lib/long-decimal.rb"
|
|
18
18
|
#
|
19
19
|
class TestLongDecimal_class < RUNIT::TestCase
|
20
20
|
|
21
|
-
@RCS_ID='-$Id: testlongdecimal.rb,v 1.
|
21
|
+
@RCS_ID='-$Id: testlongdecimal.rb,v 1.28 2006/04/05 23:33:54 bk1 Exp $-'
|
22
22
|
|
23
23
|
#
|
24
24
|
# convenience method for comparing two numbers. true if and only if
|
25
|
-
# they express the same value
|
25
|
+
# they express the same value
|
26
26
|
#
|
27
27
|
def assert_val_equal(expected, actual, message="")
|
28
28
|
_wrap_assertion {
|
29
29
|
full_message = build_message(message, "Expected <?> to match <?>", actual, expected)
|
30
30
|
assert_block(full_message) {
|
31
|
-
|
31
|
+
(expected <=> actual).zero?
|
32
32
|
}
|
33
33
|
}
|
34
34
|
end
|
@@ -514,7 +514,7 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
514
514
|
# helper method for test_log
|
515
515
|
# tests if log(x) with precision prec is calculated correctly
|
516
516
|
#
|
517
|
-
def check_log_floated(x, prec)
|
517
|
+
def check_log_floated(x, prec, divisor=1e9, summand=0)
|
518
518
|
|
519
519
|
# make sure x is LongDecimal
|
520
520
|
x0 = x
|
@@ -528,25 +528,26 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
528
528
|
xf = x.to_f
|
529
529
|
if (xf > 0) then
|
530
530
|
z = Math.log(x.to_f)
|
531
|
-
|
532
|
-
|
531
|
+
zl = z.to_ld(y.scale)
|
532
|
+
delta = [ y.unit, z.abs / divisor + summand ].max
|
533
|
+
assert((y - zl).abs <= delta, "y=#{y.to_s} (#{y.to_f}) and z=#{z.to_s} (#{zl.to_f}) should be almost equal (d=#{delta} x=#{x} y=#{y})")
|
533
534
|
end
|
534
535
|
end
|
535
536
|
|
536
|
-
# check by taking exp(log(
|
537
|
+
# check by taking exp(log(y))
|
537
538
|
# we have to take into account that we might not have enough
|
538
539
|
# significant digits, so we have to go down with the precision
|
539
540
|
if (y <= LongMath::MAX_EXP_ABLE) then
|
540
|
-
eprec = prec
|
541
|
+
eprec = prec-1
|
541
542
|
if (y > 1) then
|
542
|
-
|
543
|
-
if (
|
544
|
-
puts("unusual
|
545
|
-
|
543
|
+
ly = 0
|
544
|
+
if (y > LongMath::MAX_FLOATABLE) then
|
545
|
+
puts("unusual y=#{y} y=#{y}\n")
|
546
|
+
ly = LongMath::MAX_EXP_ABLE
|
546
547
|
else
|
547
|
-
|
548
|
+
ly = Math.log(y.to_f)
|
548
549
|
end
|
549
|
-
l10 = (
|
550
|
+
l10 = (ly / Math.log(10)).ceil
|
550
551
|
eprec = [ eprec - l10, 0 ].max
|
551
552
|
end
|
552
553
|
|
@@ -557,8 +558,8 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
557
558
|
# check by doing calculation with different internal rounding modes. They should not differ.
|
558
559
|
yd = LongMath.log_internal(x, prec, nil, nil, LongDecimal::ROUND_DOWN)
|
559
560
|
yu = LongMath.log_internal(x, prec, nil, nil, LongDecimal::ROUND_UP)
|
560
|
-
assert_equal(yd, yu, "the result yd/yu should not depend on the internal rounding mode
|
561
|
-
assert_equal(y, yu, "the result y/yu should not depend on the internal rounding mode
|
561
|
+
assert_equal(yd, yu, "the result yd/yu should not depend on the internal rounding mode yd=#{yd} yu=#{yu} y=#{y} p=#{prec} d=#{(yd-yu).to_f.to_s}")
|
562
|
+
assert_equal(y, yu, "the result y/yu should not depend on the internal rounding mode yd=#{yd} yu=#{yu} y=#{y} p=#{prec} d=#{(y -yu).to_f.to_s}")
|
562
563
|
end
|
563
564
|
|
564
565
|
#
|
@@ -575,6 +576,18 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
575
576
|
check_log_floated(1e-300, 10)
|
576
577
|
check_log_floated(LongDecimal(1, 2000), 10)
|
577
578
|
|
579
|
+
check_log_floated(2, 50)
|
580
|
+
check_log_floated(1.01, 50)
|
581
|
+
check_log_floated(1+1e-10, 50, 1e7)
|
582
|
+
check_log_floated(1.to_ld(90).succ, 100, 1e9, 1e-90)
|
583
|
+
check_log_floated(1.to_ld(300).succ, 400, 1e9,1e-300)
|
584
|
+
|
585
|
+
check_log_floated(2, 50)
|
586
|
+
check_log_floated(0.99, 50)
|
587
|
+
check_log_floated(1-1e-10, 50, 1e7)
|
588
|
+
check_log_floated(1.to_ld(90).pred, 100, 1e9, 1e-90)
|
589
|
+
check_log_floated(1.to_ld(300).pred, 400, 1e9, 1e-300)
|
590
|
+
|
578
591
|
check_log_floated(10**2000, 100)
|
579
592
|
check_log_floated(100, 100)
|
580
593
|
check_log_floated(1, 100)
|
@@ -1330,6 +1343,9 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
1330
1343
|
#
|
1331
1344
|
def test_int_digits10
|
1332
1345
|
assert_equal(0, LongDecimal("0.0000").int_digits10, "0.0000")
|
1346
|
+
assert_equal(0, LongDecimal("0.0009").int_digits10, "0.0009")
|
1347
|
+
assert_equal(0, LongDecimal("0.0099").int_digits10, "0.0099")
|
1348
|
+
assert_equal(0, LongDecimal("0.0999").int_digits10, "0.0999")
|
1333
1349
|
assert_equal(0, LongDecimal("0.9999").int_digits10, "0.9999")
|
1334
1350
|
assert_equal(1, LongDecimal("1.0000").int_digits10, "1.0000")
|
1335
1351
|
assert_equal(1, LongDecimal("9.9999").int_digits10, "9.9999")
|
@@ -1346,6 +1362,61 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
1346
1362
|
assert_equal(2, LongDecimal("-99.9999").int_digits10, "-99.9999")
|
1347
1363
|
assert_equal(3, LongDecimal("-100.0000").int_digits10, "-100.0000")
|
1348
1364
|
assert_equal(3, LongDecimal("-999.9999").int_digits10, "-999.9999")
|
1365
|
+
x = 1234.to_ld
|
1366
|
+
assert_equal(4, x.int_digits10, "1234")
|
1367
|
+
assert_equal(4, x.int_digits10, "1234")
|
1368
|
+
x = 1234.to_ld(10)
|
1369
|
+
assert_equal(4, x.int_digits10, "1234")
|
1370
|
+
assert_equal(4, x.int_digits10, "1234")
|
1371
|
+
end
|
1372
|
+
|
1373
|
+
#
|
1374
|
+
# test sint_digits10 of LongDecimal
|
1375
|
+
#
|
1376
|
+
def test_sint_digits10
|
1377
|
+
assert_equal(-4, LongDecimal("0.0000").sint_digits10, "0.0000")
|
1378
|
+
assert_equal(-3, LongDecimal("0.0009").sint_digits10, "0.0009")
|
1379
|
+
assert_equal(-2, LongDecimal("0.0099").sint_digits10, "0.0099")
|
1380
|
+
assert_equal(-1, LongDecimal("0.0999").sint_digits10, "0.0999")
|
1381
|
+
assert_equal(0, LongDecimal("0.9999").sint_digits10, "0.9999")
|
1382
|
+
assert_equal(1, LongDecimal("1.0000").sint_digits10, "1.0000")
|
1383
|
+
assert_equal(1, LongDecimal("9.9999").sint_digits10, "9.9999")
|
1384
|
+
assert_equal(2, LongDecimal("10.0000").sint_digits10, "10.0000")
|
1385
|
+
assert_equal(2, LongDecimal("99.9999").sint_digits10, "99.9999")
|
1386
|
+
assert_equal(3, LongDecimal("100.0000").sint_digits10, "100.0000")
|
1387
|
+
assert_equal(3, LongDecimal("999.9999").sint_digits10, "999.9999")
|
1388
|
+
|
1389
|
+
assert_equal(-4, LongDecimal("-0.0000").sint_digits10, "-0.0000")
|
1390
|
+
assert_equal(0, LongDecimal("-0.9999").sint_digits10, "-0.9999")
|
1391
|
+
assert_equal(1, LongDecimal("-1.0000").sint_digits10, "-1.0000")
|
1392
|
+
assert_equal(1, LongDecimal("-9.9999").sint_digits10, "-9.9999")
|
1393
|
+
assert_equal(2, LongDecimal("-10.0000").sint_digits10, "-10.0000")
|
1394
|
+
assert_equal(2, LongDecimal("-99.9999").sint_digits10, "-99.9999")
|
1395
|
+
assert_equal(3, LongDecimal("-100.0000").sint_digits10, "-100.0000")
|
1396
|
+
assert_equal(3, LongDecimal("-999.9999").sint_digits10, "-999.9999")
|
1397
|
+
x = 1234.to_ld
|
1398
|
+
assert_equal(4, x.sint_digits10, "1234")
|
1399
|
+
assert_equal(4, x.sint_digits10, "1234")
|
1400
|
+
x = 1234.to_ld(10)
|
1401
|
+
assert_equal(4, x.sint_digits10, "1234")
|
1402
|
+
assert_equal(4, x.sint_digits10, "1234")
|
1403
|
+
end
|
1404
|
+
|
1405
|
+
#
|
1406
|
+
# test int_digits10 of LongMath
|
1407
|
+
#
|
1408
|
+
def test_lm_int_digits10
|
1409
|
+
assert_equal(0, LongMath.int_digits10(0), "0")
|
1410
|
+
assert_equal(1, LongMath.int_digits10(1), "1")
|
1411
|
+
assert_equal(1, LongMath.int_digits10(9), "9")
|
1412
|
+
assert_equal(2, LongMath.int_digits10(10), "10")
|
1413
|
+
assert_equal(2, LongMath.int_digits10(11), "11")
|
1414
|
+
assert_equal(2, LongMath.int_digits10(98), "98")
|
1415
|
+
assert_equal(2, LongMath.int_digits10(99), "99")
|
1416
|
+
assert_equal(3, LongMath.int_digits10(100), "100")
|
1417
|
+
assert_equal(3, LongMath.int_digits10(999), "999")
|
1418
|
+
assert_equal(4, LongMath.int_digits10(1000), "1000")
|
1419
|
+
assert_equal(4, LongMath.int_digits10(9999), "9999")
|
1349
1420
|
end
|
1350
1421
|
|
1351
1422
|
#
|
@@ -2043,6 +2114,58 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2043
2114
|
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
|
2044
2115
|
zz = LongDecimalQuot(Rational(3333, 224), 0)
|
2045
2116
|
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2117
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2118
|
+
|
2119
|
+
# x= 2.24 dx=1 sx=2
|
2120
|
+
y = LongDecimal(33333, 2) # 333.33 dy=3 sy=2
|
2121
|
+
z = x / y
|
2122
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 2
|
2123
|
+
zz = LongDecimalQuot(Rational(224, 33333), 2)
|
2124
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2125
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2126
|
+
z = y / x
|
2127
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -2 -> use 0
|
2128
|
+
zz = LongDecimalQuot(Rational(33333, 224), 0)
|
2129
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2130
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2131
|
+
|
2132
|
+
# x= 2.24 dx=1 sx=2
|
2133
|
+
y = LongDecimal(33333, 3) # 33.333 dy=2 sy=3
|
2134
|
+
z = x / y
|
2135
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 1
|
2136
|
+
zz = LongDecimalQuot(Rational(2240, 33333), 1)
|
2137
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2138
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2139
|
+
z = y / x
|
2140
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -1 -> use 0
|
2141
|
+
zz = LongDecimalQuot(Rational(33333, 2240), 0)
|
2142
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2143
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2144
|
+
|
2145
|
+
# x= 2.24 dx=1 sx=2
|
2146
|
+
y = LongDecimal(3333, 3) # 3.333 dy=1 sy=3
|
2147
|
+
z = x / y
|
2148
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 0
|
2149
|
+
zz = LongDecimalQuot(Rational(2240, 3333), 0)
|
2150
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2151
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2152
|
+
z = y / x
|
2153
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = 0
|
2154
|
+
zz = LongDecimalQuot(Rational(3333, 2240), 0)
|
2155
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2156
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2157
|
+
|
2158
|
+
# x= 2.24 dx=1 sx=2
|
2159
|
+
y = LongDecimal(123456789, 3) # 123456.789 dy=6 sy=3
|
2160
|
+
z = x / y
|
2161
|
+
# 2dy+sy+sx-max(dx+sx,dy+sy)-3 = 5
|
2162
|
+
zz = LongDecimalQuot(Rational(2240, 123456789), 5)
|
2163
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2164
|
+
assert_equal(zz, z, "z=#{z.inspect}")
|
2165
|
+
z = y / x
|
2166
|
+
# 2dx+sx+sy-max(dx+sx,dy+sy)-3 = -5 -> use 0
|
2167
|
+
zz = LongDecimalQuot(Rational(123456789, 2240), 0)
|
2168
|
+
assert_kind_of(LongDecimalQuot, z, "z=#{z.inspect}")
|
2046
2169
|
assert_equal(zz, z, "z=#{z.inspect}")
|
2047
2170
|
|
2048
2171
|
# x= 2.24 dx=1 sx=2
|
@@ -2520,21 +2643,65 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2520
2643
|
assert_equal(x, w, "left 12 right 12")
|
2521
2644
|
|
2522
2645
|
y = x.move_point_right(4)
|
2523
|
-
z = LongDecimal(n,
|
2646
|
+
z = LongDecimal(n, 5)
|
2524
2647
|
assert_equal(y, z, "right 4")
|
2525
2648
|
w = y.move_point_left(4)
|
2526
2649
|
ww = y.move_point_right(-4)
|
2527
2650
|
assert_equal(w, ww, "left / right 4")
|
2528
2651
|
assert_equal(x, w, "right 4 left 4")
|
2529
2652
|
|
2530
|
-
y = x.
|
2531
|
-
yy = x.
|
2653
|
+
y = x.move_point_right(12)
|
2654
|
+
yy = x.move_point_left(-12)
|
2532
2655
|
assert_equal(y, yy, "left / right 12")
|
2533
2656
|
z = LongDecimal(n * 1000, 0)
|
2534
2657
|
assert_equal(y, z, "left 12")
|
2535
|
-
w = y.
|
2658
|
+
w = y.move_point_left(12)
|
2536
2659
|
v = x.round_to_scale(12)
|
2537
2660
|
assert_equal(v, w, "right 12 left 12")
|
2661
|
+
|
2662
|
+
y = x.move_point_left(12)
|
2663
|
+
yy = x.move_point_right(-12)
|
2664
|
+
assert_equal(y, yy, "left / right 12")
|
2665
|
+
z = LongDecimal(n, 21)
|
2666
|
+
assert_equal(y, z, "left 12")
|
2667
|
+
w = y.move_point_right(12)
|
2668
|
+
assert_equal(x, w, "right 12 left 12")
|
2669
|
+
end
|
2670
|
+
|
2671
|
+
#
|
2672
|
+
# test moving of decimal point of LongDecimal
|
2673
|
+
#
|
2674
|
+
def test_move_point2
|
2675
|
+
x = LongDecimal(224, 2)
|
2676
|
+
|
2677
|
+
y = x.move_point_left(0)
|
2678
|
+
assert_equal(x, y, "point not moved")
|
2679
|
+
y = x.move_point_right(0)
|
2680
|
+
assert_equal(x, y, "point not moved")
|
2681
|
+
|
2682
|
+
z = LongDecimal(224, 3)
|
2683
|
+
y = x.move_point_left(1)
|
2684
|
+
assert_equal(z, y, "0.224")
|
2685
|
+
y = x.move_point_right(-1)
|
2686
|
+
assert_equal(z, y, "0.224")
|
2687
|
+
|
2688
|
+
z = LongDecimal(224, 1)
|
2689
|
+
y = x.move_point_left(-1)
|
2690
|
+
assert_equal(z, y, "22.4")
|
2691
|
+
y = x.move_point_right(1)
|
2692
|
+
assert_equal(z, y, "22.4")
|
2693
|
+
|
2694
|
+
z = LongDecimal(224, 5)
|
2695
|
+
y = x.move_point_left(3)
|
2696
|
+
assert_equal(z, y, "0.00224")
|
2697
|
+
y = x.move_point_right(-3)
|
2698
|
+
assert_equal(z, y, "0.00224")
|
2699
|
+
|
2700
|
+
z = LongDecimal(2240, 0)
|
2701
|
+
y = x.move_point_left(-3)
|
2702
|
+
assert_equal(z, y, "2240")
|
2703
|
+
y = x.move_point_right(3)
|
2704
|
+
assert_equal(z, y, "2240")
|
2538
2705
|
end
|
2539
2706
|
|
2540
2707
|
#
|
@@ -2572,6 +2739,46 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2572
2739
|
assert(y0 <= y1, "y0 y1")
|
2573
2740
|
assert(y1 <= y2, "y1 y2")
|
2574
2741
|
|
2742
|
+
y0 = check_sqrt(x, 140, LongDecimal::ROUND_DOWN, 0, 1, "two")
|
2743
|
+
assert(y0.square < x, "y0*y0")
|
2744
|
+
assert(y0.succ.square > x, "(y0.succ).square")
|
2745
|
+
y1 = check_sqrt(x, 140, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
|
2746
|
+
y2 = check_sqrt(x, 140, LongDecimal::ROUND_UP, -1, 0, "two")
|
2747
|
+
assert(y2.pred.square < x, "y2.pred.squre")
|
2748
|
+
assert(y2.square > x, "y2*y2")
|
2749
|
+
assert(y0 <= y1, "y0 y1")
|
2750
|
+
assert(y1 <= y2, "y1 y2")
|
2751
|
+
|
2752
|
+
y0 = check_sqrt(x, 160, LongDecimal::ROUND_DOWN, 0, 1, "two")
|
2753
|
+
assert(y0.square < x, "y0*y0")
|
2754
|
+
assert(y0.succ.square > x, "(y0.succ).square")
|
2755
|
+
y1 = check_sqrt(x, 160, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
|
2756
|
+
y2 = check_sqrt(x, 160, LongDecimal::ROUND_UP, -1, 0, "two")
|
2757
|
+
assert(y2.pred.square < x, "y2.pred.squre")
|
2758
|
+
assert(y2.square > x, "y2*y2")
|
2759
|
+
assert(y0 <= y1, "y0 y1")
|
2760
|
+
assert(y1 <= y2, "y1 y2")
|
2761
|
+
|
2762
|
+
y0 = check_sqrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "two")
|
2763
|
+
assert(y0.square < x, "y0*y0")
|
2764
|
+
assert(y0.succ.square > x, "(y0.succ).square")
|
2765
|
+
y1 = check_sqrt(x, 120, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
|
2766
|
+
y2 = check_sqrt(x, 120, LongDecimal::ROUND_UP, -1, 0, "two")
|
2767
|
+
assert(y2.pred.square < x, "y2.pred.squre")
|
2768
|
+
assert(y2.square > x, "y2*y2")
|
2769
|
+
assert(y0 <= y1, "y0 y1")
|
2770
|
+
assert(y1 <= y2, "y1 y2")
|
2771
|
+
|
2772
|
+
y0 = check_sqrt(x, 100, LongDecimal::ROUND_DOWN, 0, 1, "two")
|
2773
|
+
assert(y0.square < x, "y0*y0")
|
2774
|
+
assert(y0.succ.square > x, "(y0.succ).square")
|
2775
|
+
y1 = check_sqrt(x, 100, LongDecimal::ROUND_HALF_EVEN, -1, 1, "two")
|
2776
|
+
y2 = check_sqrt(x, 100, LongDecimal::ROUND_UP, -1, 0, "two")
|
2777
|
+
assert(y2.pred.square < x, "y2.pred.squre")
|
2778
|
+
assert(y2.square > x, "y2*y2")
|
2779
|
+
assert(y0 <= y1, "y0 y1")
|
2780
|
+
assert(y1 <= y2, "y1 y2")
|
2781
|
+
|
2575
2782
|
x = 3.to_ld
|
2576
2783
|
y0 = check_sqrt(x, 120, LongDecimal::ROUND_DOWN, 0, 1, "three")
|
2577
2784
|
assert(y0.square < x, "y0*y0")
|
@@ -2618,9 +2825,15 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2618
2825
|
|
2619
2826
|
x = LongDecimal.two!(101)
|
2620
2827
|
check_sqrt_with_remainder(x, 120, "two")
|
2828
|
+
check_sqrt_with_remainder(x, 140, "two")
|
2829
|
+
check_sqrt_with_remainder(x, 160, "two")
|
2830
|
+
check_sqrt_with_remainder(x, 100, "two")
|
2621
2831
|
|
2622
2832
|
x = 3.to_ld
|
2623
2833
|
check_sqrt_with_remainder(x, 120, "three")
|
2834
|
+
check_sqrt_with_remainder(x, 140, "three")
|
2835
|
+
check_sqrt_with_remainder(x, 160, "three")
|
2836
|
+
check_sqrt_with_remainder(x, 100, "three")
|
2624
2837
|
|
2625
2838
|
x = 4.to_ld.round_to_scale(101)
|
2626
2839
|
r = check_sqrt_with_remainder(x, 120, "four")
|
@@ -2630,6 +2843,29 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2630
2843
|
check_sqrt_with_remainder(x, 120, "five")
|
2631
2844
|
end
|
2632
2845
|
|
2846
|
+
#
|
2847
|
+
# test LongMath.sqrt with non-LongDecimal arguments
|
2848
|
+
#
|
2849
|
+
def test_non_ld_sqrt
|
2850
|
+
xi = 77
|
2851
|
+
yi = LongMath.sqrt(xi, 31, LongMath::ROUND_HALF_EVEN)
|
2852
|
+
zi = yi.square.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
|
2853
|
+
assert(zi.is_int?, "zi=#{zi.to_s}")
|
2854
|
+
assert_equal(xi, zi.to_i, "zi")
|
2855
|
+
|
2856
|
+
xf = 77.0
|
2857
|
+
yf = LongMath.sqrt(xf, 31, LongMath::ROUND_HALF_EVEN)
|
2858
|
+
zf = yf.square.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
|
2859
|
+
assert(zf.is_int?, "zf")
|
2860
|
+
assert_equal(xf, zf.to_f, "zf")
|
2861
|
+
assert_equal(yi, yf, "i-f")
|
2862
|
+
|
2863
|
+
xr = Rational(224, 227)
|
2864
|
+
yr = LongMath.sqrt(xr, 31, LongMath::ROUND_HALF_EVEN)
|
2865
|
+
zr = yr.square.round_to_scale(30, LongMath::ROUND_HALF_EVEN)
|
2866
|
+
assert((zr-xr).abs <= zr.unit, "zr-xr")
|
2867
|
+
end
|
2868
|
+
|
2633
2869
|
#
|
2634
2870
|
# test absolute value of LongDecimal
|
2635
2871
|
#
|
@@ -2645,42 +2881,6 @@ class TestLongDecimal_class < RUNIT::TestCase
|
|
2645
2881
|
assert_equal(x, y, "abs of zero")
|
2646
2882
|
end
|
2647
2883
|
|
2648
|
-
#
|
2649
|
-
# test moving of decimal point of LongDecimal
|
2650
|
-
#
|
2651
|
-
def test_move_point
|
2652
|
-
x = LongDecimal(224, 2)
|
2653
|
-
|
2654
|
-
y = x.move_point_left(0)
|
2655
|
-
assert_equal(x, y, "point not moved")
|
2656
|
-
y = x.move_point_right(0)
|
2657
|
-
assert_equal(x, y, "point not moved")
|
2658
|
-
|
2659
|
-
z = LongDecimal(224, 3)
|
2660
|
-
y = x.move_point_left(1)
|
2661
|
-
assert_equal(z, y, "0.224")
|
2662
|
-
y = x.move_point_right(-1)
|
2663
|
-
assert_equal(z, y, "0.224")
|
2664
|
-
|
2665
|
-
z = LongDecimal(224, 1)
|
2666
|
-
y = x.move_point_left(-1)
|
2667
|
-
assert_equal(z, y, "22.4")
|
2668
|
-
y = x.move_point_right(1)
|
2669
|
-
assert_equal(z, y, "22.4")
|
2670
|
-
|
2671
|
-
z = LongDecimal(224, 5)
|
2672
|
-
y = x.move_point_left(3)
|
2673
|
-
assert_equal(z, y, "0.00224")
|
2674
|
-
y = x.move_point_right(-3)
|
2675
|
-
assert_equal(z, y, "0.00224")
|
2676
|
-
|
2677
|
-
z = LongDecimal(2240, 0)
|
2678
|
-
y = x.move_point_left(-3)
|
2679
|
-
assert_equal(z, y, "2240")
|
2680
|
-
y = x.move_point_right(3)
|
2681
|
-
assert_equal(z, y, "2240")
|
2682
|
-
end
|
2683
|
-
|
2684
2884
|
#
|
2685
2885
|
# test ufo-operator (<=>) of LongDecimal
|
2686
2886
|
#
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: long-decimal
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.00.
|
7
|
-
date: 2006-04-
|
6
|
+
version: 0.00.21
|
7
|
+
date: 2006-04-06 00:00:00 +02:00
|
8
8
|
summary: LongDecimal for numbers with fixed point
|
9
9
|
require_paths:
|
10
10
|
- lib
|