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.
- data/CHANGELOG +5 -0
- data/ext/mpc.c +132 -14
- data/manual.md +76 -5
- data/manual.pdf +0 -0
- data/spec/log10_spec.rb +39 -0
- metadata +3 -1
data/CHANGELOG
ADDED
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",
|
968
|
-
rb_define_method (cMPC, "+",
|
969
|
-
rb_define_method (cMPC, "sub",
|
970
|
-
rb_define_method (cMPC, "-",
|
971
|
-
rb_define_method (cMPC, "neg",
|
972
|
-
rb_define_method (cMPC, "-@",
|
973
|
-
rb_define_method (cMPC, "mul",
|
974
|
-
rb_define_method (cMPC, "*",
|
975
|
-
rb_define_method (cMPC, "
|
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
|
-
|
978
|
-
rb_define_method (cMPC, "
|
979
|
-
rb_define_method (cMPC, "
|
980
|
-
|
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
|
-
|
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
|
-
& \
|
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
|
-
|
705
|
-
|
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
|
-
|
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
|
data/spec/log10_spec.rb
ADDED
@@ -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.
|
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
|