gnu_mpc 0.8.0 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. data/CHANGELOG +5 -0
  2. data/ext/mpc.c +132 -14
  3. data/manual.md +76 -5
  4. data/manual.pdf +0 -0
  5. data/spec/log10_spec.rb +39 -0
  6. metadata +3 -1
data/CHANGELOG ADDED
@@ -0,0 +1,5 @@
1
+ * v 0.8.1
2
+ * Added MPC#/, MPC#div
3
+ * Added MPC#log10
4
+ * v 0.8.0
5
+ * Most things
data/ext/mpc.c CHANGED
@@ -850,6 +850,93 @@ VALUE r_mpc_mul_do_the_work(VALUE self_val, VALUE arg_val, mpc_rnd_t rnd_mode, m
850
850
  return res_val;
851
851
  }
852
852
 
853
+ VALUE r_mpc_div_do_the_work(VALUE self_val, VALUE arg_val, mpc_rnd_t rnd_mode, mpfr_prec_t res_real_prec, mpfr_prec_t res_imag_prec);
854
+ VALUE r_mpc_div(int argc, VALUE *argv, VALUE self_val)
855
+ {
856
+ MP_COMPLEX *self;
857
+ VALUE rnd_mode_val;
858
+ VALUE res_real_prec_val, res_imag_prec_val;
859
+ VALUE arg_val;
860
+
861
+ mpfr_prec_t real_prec, imag_prec;
862
+ mpfr_prec_t res_real_prec, res_imag_prec;
863
+ mpc_rnd_t rnd_mode;
864
+
865
+ mpc_get_struct(self_val,self);
866
+ real_prec = mpfr_get_prec(mpc_realref(self));
867
+ imag_prec = mpfr_get_prec(mpc_imagref(self));
868
+
869
+ //if (argc > 0 && TYPE(argv[0]) == T_HASH) {
870
+ // rb_mpc_get_hash_arguments (&rnd_mode, &real_prec, &imag_prec, argv[0]);
871
+ //res_real_prec = real_prec;
872
+ //res_imag_prec = imag_prec;
873
+ //} else {
874
+ rb_scan_args (argc, argv, "13", &arg_val, &rnd_mode_val, &res_real_prec_val, &res_imag_prec_val);
875
+
876
+ r_mpc_set_default_args (rnd_mode_val, res_real_prec_val, res_imag_prec_val,
877
+ &rnd_mode, &res_real_prec, &res_imag_prec,
878
+ real_prec, imag_prec);
879
+ //}
880
+
881
+ //return res_val;
882
+ return r_mpc_div_do_the_work(self_val, arg_val, rnd_mode, res_real_prec, res_imag_prec);
883
+ }
884
+
885
+ VALUE r_mpc_div2(VALUE self_val, VALUE arg_val)
886
+ {
887
+ MP_COMPLEX *self;
888
+
889
+ mpfr_prec_t res_real_prec, res_imag_prec;
890
+
891
+ mpc_get_struct(self_val, self);
892
+ res_real_prec = mpfr_get_prec(mpc_realref(self));
893
+ res_imag_prec = mpfr_get_prec(mpc_imagref(self));
894
+
895
+ return r_mpc_div_do_the_work(self_val, arg_val, MPC_RNDNN, res_real_prec, res_imag_prec);
896
+ }
897
+
898
+ VALUE r_mpc_div_do_the_work(VALUE self_val, VALUE arg_val, mpc_rnd_t rnd_mode, mpfr_prec_t res_real_prec, mpfr_prec_t res_imag_prec) {
899
+ MP_COMPLEX *self, *res, *arg_c;
900
+ MP_INT *arg_z;
901
+ MP_FLOAT *arg_f;
902
+ VALUE res_val;
903
+
904
+ mpc_get_struct(self_val,self);
905
+
906
+ if (FIXNUM_P (arg_val)) {
907
+ mpc_make_struct_init3 (res_val, res, res_real_prec, res_imag_prec);
908
+ if (FIX2NUM (arg_val) >= 0) {
909
+ mpc_div_ui (res, self, FIX2NUM (arg_val), rnd_mode);
910
+ } else {
911
+ mpc_div_ui (res, self, -FIX2NUM (arg_val), rnd_mode);
912
+ mpc_neg (res, res, rnd_mode);
913
+ }
914
+ } else if (BIGNUM_P (arg_val)) {
915
+ mpc_make_struct_init3 (res_val, res, res_real_prec, res_imag_prec);
916
+ mpz_temp_from_bignum (arg_z, arg_val);
917
+ mpc_set_z (res, arg_z, MPC_RNDNN);
918
+ mpz_temp_free (arg_z);
919
+ mpc_div (res, self, res, rnd_mode);
920
+ } else if (GMPZ_P (arg_val)) {
921
+ mpc_make_struct_init3 (res_val, res, res_real_prec, res_imag_prec);
922
+ mpz_get_struct (arg_val, arg_z);
923
+ mpc_set_z (res, arg_z, MPC_RNDNN);
924
+ mpc_div (res, self, res, rnd_mode);
925
+ } else if (GMPF_P (arg_val)) {
926
+ mpc_make_struct_init3 (res_val, res, res_real_prec, res_imag_prec);
927
+ mpf_get_struct (arg_val, arg_f);
928
+ mpc_div_fr (res, self, arg_f, rnd_mode);
929
+ } else if (MPC_P (arg_val)) {
930
+ mpc_make_struct_init3 (res_val, res, res_real_prec, res_imag_prec);
931
+ mpc_get_struct (arg_val, arg_c);
932
+ mpc_div (res, self, arg_c, rnd_mode);
933
+ } else {
934
+ typeerror(FXC);
935
+ }
936
+
937
+ return res_val;
938
+ }
939
+
853
940
  MPC_SINGLE_FUNCTION(neg)
854
941
 
855
942
  /*
@@ -905,6 +992,34 @@ VALUE r_mpc_abs(int argc, VALUE *argv, VALUE self)
905
992
  return abs;
906
993
  }
907
994
 
995
+ /*
996
+ * call-seq:
997
+ * c.norm
998
+ * c.norm(rounding_mode)
999
+ *
1000
+ * Returns the norm of _c_ (i.e., the square of its absolute value), as a GMP_F float (an MPFR float, really).
1001
+ */
1002
+ VALUE r_mpc_norm(int argc, VALUE *argv, VALUE self)
1003
+ {
1004
+ MP_COMPLEX *self_val;
1005
+ MP_FLOAT *norm_val;
1006
+ VALUE rnd_mode, norm;
1007
+ mpfr_prec_t pr=0, pi=0;
1008
+ mpc_rnd_t rnd_mode_val;
1009
+
1010
+ mpc_get_struct (self, self_val);
1011
+
1012
+ rb_scan_args (argc, argv, "01", &rnd_mode);
1013
+ if (NIL_P (rnd_mode)) { rnd_mode_val = r_mpc_default_rounding_mode; }
1014
+ else { rnd_mode_val = r_get_mpc_rounding_mode (rnd_mode); }
1015
+
1016
+ mpf_make_struct (norm, norm_val);
1017
+ mpc_get_prec2 (&pr, &pi, self_val);
1018
+ mpfr_init2 (norm_val, pr);
1019
+ mpc_norm (norm_val, self_val, rnd_mode_val);
1020
+ return norm;
1021
+ }
1022
+
908
1023
  /*********************************************************************
909
1024
  * Power and Logarithm Functions *
910
1025
  *********************************************************************/
@@ -912,6 +1027,7 @@ VALUE r_mpc_abs(int argc, VALUE *argv, VALUE self)
912
1027
  MPC_SINGLE_FUNCTION(sqrt)
913
1028
  MPC_SINGLE_FUNCTION(exp)
914
1029
  MPC_SINGLE_FUNCTION(log)
1030
+ MPC_SINGLE_FUNCTION(log10)
915
1031
 
916
1032
  /*********************************************************************
917
1033
  * Trigonometric Functions *
@@ -964,20 +1080,22 @@ void Init_mpc() {
964
1080
  rb_define_method (cMPC, "proj", r_mpc_proj, -1);
965
1081
 
966
1082
  // Basic Arithmetic Functions
967
- rb_define_method (cMPC, "add", r_mpc_add, -1);
968
- rb_define_method (cMPC, "+", r_mpc_add2, 1);
969
- rb_define_method (cMPC, "sub", r_mpc_sub, -1);
970
- rb_define_method (cMPC, "-", r_mpc_sub2, 1);
971
- rb_define_method (cMPC, "neg", r_mpc_neg, -1);
972
- rb_define_method (cMPC, "-@", r_mpc_neg2, 0);
973
- rb_define_method (cMPC, "mul", r_mpc_mul, -1);
974
- rb_define_method (cMPC, "*", r_mpc_mul2, 1);
975
- rb_define_method (cMPC, "sqr", r_mpc_sqr, -1);
1083
+ rb_define_method (cMPC, "add", r_mpc_add, -1);
1084
+ rb_define_method (cMPC, "+", r_mpc_add2, 1);
1085
+ rb_define_method (cMPC, "sub", r_mpc_sub, -1);
1086
+ rb_define_method (cMPC, "-", r_mpc_sub2, 1);
1087
+ rb_define_method (cMPC, "neg", r_mpc_neg, -1);
1088
+ rb_define_method (cMPC, "-@", r_mpc_neg2, 0);
1089
+ rb_define_method (cMPC, "mul", r_mpc_mul, -1);
1090
+ rb_define_method (cMPC, "*", r_mpc_mul2, 1);
1091
+ // TODO rb_define_method (cMPC, "mul_i", r_mpc_mul_i, -1);
1092
+ rb_define_method (cMPC, "sqr", r_mpc_sqr, -1);
976
1093
  // TODO rb_define_method (cMPC, "fma", r_mpc_fma, 2);
977
- // TODO rb_define_method (cMPC, "/", r_mpc_div, 1);
978
- rb_define_method (cMPC, "conj", r_mpc_conj, -1);
979
- rb_define_method (cMPC, "abs", r_mpc_abs, -1);
980
- // TODO rb_define_method (cMPC, "norm", r_mpc_norm, 0);
1094
+ rb_define_method (cMPC, "div", r_mpc_div, -1);
1095
+ rb_define_method (cMPC, "/", r_mpc_div2, 1);
1096
+ rb_define_method (cMPC, "conj", r_mpc_conj, -1);
1097
+ rb_define_method (cMPC, "abs", r_mpc_abs, -1);
1098
+ rb_define_method (cMPC, "norm", r_mpc_norm, -1);
981
1099
  // TODO rb_define_method (cMPC, "mul_2exp", r_mpc_mul_2exp, 1);
982
1100
  // TODO rb_define_method (cMPC, "div_2exp", r_mpc_div_2exp, 1);
983
1101
 
@@ -986,7 +1104,7 @@ void Init_mpc() {
986
1104
  // TODO rb_define_method (cMPC, "**", r_mpc_pow, 1);
987
1105
  rb_define_method (cMPC, "exp", r_mpc_exp, -1);
988
1106
  rb_define_method (cMPC, "log", r_mpc_log, -1);
989
- // TODO rb_define_method (cMPC, "log10", r_mpc_log10, -1);
1107
+ rb_define_method (cMPC, "log10", r_mpc_log10, -1);
990
1108
 
991
1109
  // Trigonometric Functions
992
1110
  rb_define_method (cMPC, "sin", r_mpc_sin, -1);
data/manual.md CHANGED
@@ -455,6 +455,7 @@ according to $rounding\_mode$.
455
455
  \texttt{a = MPC.new(GMP::F("3.1416", 12)) \#=> (3.1416 +0) \newline
456
456
  a + 0 \qqqquad\qqqquad\qquad\qqqquad \#=> (3.1416 +0) \newline
457
457
  a + 1 \qqqquad\qqqquad\qqqquad\qquad \#=> (4.1406 +0) \newline
458
+ a - -7 \qqqquad\qqqquad\qqqquad\quad\ \#=> (-3.8584 +0) \newline
458
459
  a + GMP::Z(1024) \qqqquad\qqqquad\ \#=> (1.0270e+3 +0) \newline
459
460
  a + 2**66 \qqqquad\qqqquad\qqqquad \#=> (7.3787e+19 +0) \newline
460
461
  a + GMP::F("3.1416", 12) \qqqquad\ \#=> (6.2832 +0) \newline}
@@ -472,6 +473,7 @@ according to $rounding\_mode$.
472
473
  \texttt{a = MPC.new(GMP::F("3.1416", 12)) \#=> (3.1416 +0) \newline
473
474
  a - 0 \qqqquad\qqqquad\qquad\qqqquad \#=> (3.1416 +0) \newline
474
475
  a - 1 \qqqquad\qqqquad\qqqquad\qquad \#=> (2.1416 +0) \newline
476
+ a - -7 \qqqquad\qqqquad\qqqquad\quad\ \#=> (1.0141e+1 +0) \newline
475
477
  a - GMP::Z(1024) \qqqquad\qqqquad\ \#=> (-1.0208e+3 +0) \newline
476
478
  a - 2**66 \qqqquad\qqqquad\qqqquad \#=> (-7.3787e+19 +0) \newline
477
479
  a - GMP::F("3.1416", 12) \qqqquad\ \#=> (+0 +0) \newline}
@@ -489,12 +491,33 @@ according to $rounding\_mode$.
489
491
  \texttt{a = MPC.new(GMP::F("3.1416", 12)) \#=> (3.1416 +0) \newline
490
492
  a * 0 \qqqquad\qqqquad\qquad\qqqquad \#=> (+0 +0) \newline
491
493
  a * 1 \qqqquad\qqqquad\qqqquad\qquad \#=> (3.1416 +0) \newline
494
+ a * -7 \qqqquad\qqqquad\qqqquad\quad\ \#=> (-2.1992e+1 -0)\newline
492
495
  a * GMP::Z(1024) \qqqquad\qqqquad\ \#=> (3.2170e+3 +0) \newline
493
496
  a * 2**66 \qqqquad\qqqquad\qqqquad \#=> (2.3181e+20 +0) \newline
494
497
  a * GMP::F("3.1416", 12) \qqqquad\ \#=> (9.8711 +0) \newline}
495
498
  }
496
499
  \end{tabular}
497
500
 
501
+ \begin{tabular}{p{\methwidth} l r p{\returnwidth}}
502
+ \toprule
503
+ \textbf{div, /} & & MPC\#div($op2$) & $\rightarrow complex$ \\
504
+ & & MPC\#div($op2$, $rounding\_mode$ = MPC::MPC\_RNDNN) & $\rightarrow complex$ \\
505
+ & & $op1 / op2$ & $\rightarrow complex$ \\
506
+ \cmidrule(r){2-4}
507
+ & \multicolumn{3}{p{\defnwidth}}{
508
+ Return the quotient of the receiver ($op1$) and $op2$, rounded according to
509
+ $rounding\_mode$. $op2$ may be a \texttt{Fixnum}, \texttt{GMP::Z}, \texttt{Bignum}, or \texttt{GMP::F}.\newline
510
+
511
+ \texttt{a = MPC.new(GMP::F("3.1416", 12)) \#=> (3.1416 +0) \newline
512
+ a / 0 \qqqquad\qqqquad\qquad\qqqquad \#=> (@Inf@ @NaN@) \newline
513
+ a / 1 \qqqquad\qqqquad\qqqquad\qquad \#=> (3.1416 +0) \newline
514
+ a / -7 \qqqquad\qqqquad\qqqquad\quad\ \#=> (-4.4885e-1 -0)\newline
515
+ a / GMP::Z(1024) \qqqquad\qqqquad\ \#=> (3.0680e-3 +0) \newline
516
+ a / 2**66 \qqqquad\qqqquad\qqqquad \#=> (4.9088e-2 +0) \newline
517
+ a / GMP::F("3.1416", 12) \qqqquad\ \#=> (1.0000 +0) \newline}
518
+ }
519
+ \end{tabular}
520
+
498
521
  \ifdef{HTML}
499
522
  <table>
500
523
  <tr class="new-method">
@@ -516,6 +539,7 @@ $rounding\_mode$.
516
539
  <pre><code>a = MPC.new(GMP::F("3.1416", 12)) #=> (3.1416 +0)
517
540
  a + 0 #=> (3.1416 +0)
518
541
  a + 1 #=> (4.1406 +0)
542
+ a + -7 #=> (-3.8584 +0)
519
543
  a + GMP::Z(1024) #=> (1.0270e+3 +0)
520
544
  a + 2**66 #=> (7.3787e+19 +0)
521
545
  a + GMP::F("3.1416", 12) #=> (6.2832 +0)
@@ -542,6 +566,7 @@ $rounding\_mode$.
542
566
  <pre><code>a = MPC.new(GMP::F("3.1416", 12)) #=> (3.1416 +0)
543
567
  a - 0 #=> (3.1416 +0)
544
568
  a - 1 #=> (2.1416 +0)
569
+ a - -7 #=> (1.0141e+1 +0)
545
570
  a - GMP::Z(1024) #=> (-1.0208e+3 +0)
546
571
  a - 2**66 #=> (-7.3787e+19 +0)
547
572
  a - GMP::F("3.1416", 12) #=> (+0 +0)
@@ -568,9 +593,37 @@ $rounding\_mode$.
568
593
  <pre><code>a = MPC.new(GMP::F("3.1416", 12)) #=> (3.1416 +0)
569
594
  a * 0 #=> (+0 +0)
570
595
  a * 1 #=> (3.1416 +0)
596
+ a * -7 #=> (-2.1992e+1 -0)
571
597
  a * GMP::Z(1024) #=> (3.2170e+3 +0)
572
598
  a * 2**66 #=> (2.3181e+20 +0)
573
599
  a * GMP::F("3.1416", 12) #=> (9.8711 +0)
600
+ </code></pre>
601
+ </td>
602
+ </tr>
603
+
604
+ <tr class="new-method">
605
+ <th>div, /</th><th>`MPC#div(op2)` $\rightarrow$ _complex_
606
+ </tr>
607
+ <tr>
608
+ <th></th> <th><code>MPC#div(_op2_, _rounding_mode_ = MPC::MPC_RNDNN)</code> $\rightarrow$ _complex_
609
+ </th>
610
+ </tr>
611
+ <tr class="last-header">
612
+ <th></th> <th>`op1 / op2` $\rightarrow$ _complex_
613
+ </tr>
614
+ <tr>
615
+ <td></td>
616
+ <td>
617
+ Return the quotient of the receiver ($op1$) and $op2$, rounded according to
618
+ $rounding\_mode$.
619
+
620
+ <pre><code>a = MPC.new(GMP::F("3.1416", 12)) #=> (3.1416 +0)
621
+ a / 0 #=> (@Inf@ @NaN@)
622
+ a / 1 #=> (3.1416 +0)
623
+ a / -7 #=> (-4.4885e-1 -0)
624
+ a / GMP::Z(1024) #=> (3.0680e-3 +0)
625
+ a / 2**66 #=> (4.9088e-2 +0)
626
+ a / GMP::F("3.1416", 12) #=> (1.0000 +0)
574
627
  </code></pre>
575
628
  </td>
576
629
  </tr>
@@ -629,7 +682,16 @@ a * GMP::F("3.1416", 12) #=> (9.8711 +0)
629
682
 
630
683
  \toprule
631
684
  \textbf{log10} & & MPC\#log10() & $\rightarrow$ \textit{complex} \\
632
- & \multicolumn{3}{p{\defnwidth}}{\textit{Not implemented yet.}}
685
+ & & MPC\#log10(\textit{rounding\_mode} = MPC::MPC\_RNDNN, & \\
686
+ & & \textit{precision} = \textit{mpfr\_default\_precision}) & $\rightarrow$ \textit{complex} \\
687
+ & & MPC\#log10(\textit{options\_hash}) & $\rightarrow$ \textit{complex} \\
688
+ \cmidrule(r){2-4}
689
+ & \multicolumn{3}{p{\defnwidth}}{
690
+ Return the base-10 logarithm of the receiver, rounded according to
691
+ $rounding\_mode$. The principal branch is chosen, with the branch cut on the
692
+ negative real axis, so that the imaginary part of the result lies in
693
+ $[-\pi, \pi]$ and $[-\pi/log(10), \pi/log(10)]$ respectively.
694
+ }
633
695
  \end{tabular}
634
696
 
635
697
  \ifdef{HTML}
@@ -700,14 +762,23 @@ $[-\pi, \pi]$ and $[-\pi/log(10), \pi/log(10)]$ respectively.
700
762
  </td>
701
763
  </tr>
702
764
 
703
-
704
- <tr class="new-method last-header">
705
- <th>log10</th><th>`MPC#log10()` $\rightarrow$ _complex_
765
+ <tr class="new-method">
766
+ <th>log10</th><th>`MPC#log()` $\rightarrow$ _complex_
767
+ </tr>
768
+ <tr>
769
+ <th></th> <th><code>MPC#log10(_rounding_mode_ = MPC::MPC_RNDNN, _precision_ = _mpfr_default_)</code> $\rightarrow$ _complex_
770
+ </th>
771
+ </tr>
772
+ <tr class="last-header">
773
+ <th></th> <th>`MPC#log10(options_hash)` $\rightarrow$ _complex_</th>
706
774
  </tr>
707
775
  <tr>
708
776
  <td></td>
709
777
  <td>
710
- _Not implemented yet._
778
+ Return the base-10 logarithm of the receiver, rounded according to
779
+ $rounding\_mode$. The principal branch is chosen, with the branch cut on the
780
+ negative real axis, so that the imaginary part of the result lies in
781
+ $[-\pi, \pi]$ and $[-\pi/log(10), \pi/log(10)]$ respectively.
711
782
  </td>
712
783
  </tr>
713
784
  </table>
data/manual.pdf CHANGED
Binary file
@@ -0,0 +1,39 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ # All tests adapted from MPC 1.0.1's tests/log10.dat
4
+ describe MPC, '#log' do
5
+ it 'should calculate the base 10 logarithm of +1 +- i*0' do
6
+ actual = MPC.new([1, 0], 2).log10
7
+ actual.real.should eq 0
8
+ actual.imag.should eq 0
9
+ end
10
+
11
+ it 'should calculate the base 10 logarithm of 10 +- i*0' do
12
+ actual = MPC.new([GMP::F(10, 4), GMP::F(0, 2)]).log10
13
+ actual.real.should eq 1
14
+ actual.imag.should eq 0
15
+ end
16
+
17
+ it 'should calculate the base 10 logarithm of 100 +- i*0' do
18
+ actual = MPC.new([GMP::F(100, 5), GMP::F(0, 2)]).log10
19
+ actual.real.should eq 2
20
+ actual.imag.should eq 0
21
+ end
22
+
23
+ it 'should calculate the base 10 logarithm of x +i*y with either x or y zero and the other non-zero' do
24
+ data = [
25
+ [["0x13afeb354b7d97p-52", 53, 16], [ 0, 2], MPC.new([GMP::F( "0x11", 5, 16), GMP::F(0, 2)]), MPC::MPC_RNDNN],
26
+ [["0x13afeb354b7d97p-52", 53, 16], [ "0x15d47c4cb2fba1p-53", 53, 16], MPC.new([GMP::F(0, 2), GMP::F( "0x11", 5, 16)]), MPC::MPC_RNDNN],
27
+ [["0x1475c655fbc11p-48", 53, 16], [ "0x15d47c4cb2fba1p-52", 53, 16], MPC.new([GMP::F("-0x13", 5, 16), GMP::F(0, 2)]), MPC::MPC_RNDNN],
28
+ [["0x1475c655fbc11p-48", 53, 16], ["-0x15d47c4cb2fba1p-52", 53, 16], MPC.new([GMP::F("-0x13", 5, 16), -GMP::F(0, 2)]), MPC::MPC_RNDNN],
29
+ [["0x1475c655fbc11p-48", 53, 16], ["-0x15d47c4cb2fba1p-53", 53, 16], MPC.new([GMP::F(0, 2), GMP::F("-0x13", 5, 16)]), MPC::MPC_RNDNN],
30
+ ]
31
+ data.each do |expected_real, expected_imag, input, rounding_mode|
32
+ actual = input.log10(rounding_mode)
33
+ actual.real.should eq GMP::F.new(*expected_real)
34
+ actual.imag.should eq GMP::F.new(*expected_imag)
35
+ end
36
+ end
37
+
38
+ ### There are still more tests in log10.data, each a result of some bug or other thing
39
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnu_mpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -36,6 +36,7 @@ files:
36
36
  - spec/cosh_spec.rb
37
37
  - spec/exp_spec.rb
38
38
  - spec/hash_arguments_spec.rb
39
+ - spec/log10_spec.rb
39
40
  - spec/log_spec.rb
40
41
  - spec/mpc_single_function_args_spec.rb
41
42
  - spec/neg_spec.rb
@@ -54,6 +55,7 @@ files:
54
55
  - spec/to_s_spec.rb
55
56
  - spec/version_spec.rb
56
57
  - README.md
58
+ - CHANGELOG
57
59
  - manual.md
58
60
  - manual.pdf
59
61
  - COPYING.md