gnu_mpc 0.8.0

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.
Binary file
@@ -0,0 +1,177 @@
1
+ \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$]{$documentclass$}
2
+ \usepackage[T1]{fontenc}
3
+ \usepackage{lmodern}
4
+ \usepackage{amssymb,amsmath}
5
+ \usepackage{booktabs}
6
+ \usepackage{ifxetex,ifluatex}
7
+ \usepackage{fixltx2e} % provides \textsubscript
8
+ % use microtype if available
9
+ \IfFileExists{microtype.sty}{\usepackage{microtype}}{}
10
+ \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
11
+ \usepackage[utf8]{inputenc}
12
+ $if(euro)$
13
+ \usepackage{eurosym}
14
+ $endif$
15
+ \else % if luatex or xelatex
16
+ \usepackage{fontspec}
17
+ \ifxetex
18
+ \usepackage{xltxtra,xunicode}
19
+ \fi
20
+ \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
21
+ \newcommand{\euro}{€}
22
+ $if(mainfont)$
23
+ \setmainfont{$mainfont$}
24
+ $endif$
25
+ $if(sansfont)$
26
+ \setsansfont{$sansfont$}
27
+ $endif$
28
+ $if(monofont)$
29
+ \setmonofont{$monofont$}
30
+ $endif$
31
+ $if(mathfont)$
32
+ \setmathfont{$mathfont$}
33
+ $endif$
34
+ \fi
35
+ $if(geometry)$
36
+ \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
37
+ $else$
38
+ \usepackage[top=1in, bottom=0.8in, left=1.2in, right=1.2in]{geometry}
39
+ $endif$
40
+ $if(natbib)$
41
+ \usepackage{natbib}
42
+ \bibliographystyle{plainnat}
43
+ $endif$
44
+ $if(biblatex)$
45
+ \usepackage{biblatex}
46
+ $if(biblio-files)$
47
+ \bibliography{$biblio-files$}
48
+ $endif$
49
+ $endif$
50
+ $if(listings)$
51
+ \usepackage{listings}
52
+ $endif$
53
+ $if(lhs)$
54
+ \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
55
+ $endif$
56
+ $if(highlighting-macros)$
57
+ $highlighting-macros$
58
+ $endif$
59
+ $if(verbatim-in-note)$
60
+ \usepackage{fancyvrb}
61
+ $endif$
62
+ $if(tables)$
63
+ \usepackage{longtable}
64
+ $endif$
65
+ $if(graphics)$
66
+ \usepackage{graphicx}
67
+ % We will generate all images so they have a width \maxwidth. This means
68
+ % that they will get their normal width if they fit onto the page, but
69
+ % are scaled down if they would overflow the margins.
70
+ \makeatletter
71
+ \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
72
+ \else\Gin@nat@width\fi}
73
+ \makeatother
74
+ \let\Oldincludegraphics\includegraphics
75
+ \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}
76
+ $endif$
77
+ \ifxetex
78
+ \usepackage[setpagesize=false, % page size defined by xetex
79
+ unicode=false, % unicode breaks when used with xetex
80
+ xetex]{hyperref}
81
+ \else
82
+ \usepackage[unicode=true]{hyperref}
83
+ \fi
84
+ \hypersetup{breaklinks=true,
85
+ bookmarks=true,
86
+ pdfauthor={$author-meta$},
87
+ pdftitle={$title-meta$},
88
+ colorlinks=true,
89
+ urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
90
+ linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
91
+ pdfborder={0 0 0}}
92
+ $if(links-as-notes)$
93
+ % Make links footnotes instead of hotlinks:
94
+ \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
95
+ $endif$
96
+ $if(strikeout)$
97
+ \usepackage[normalem]{ulem}
98
+ % avoid problems with \sout in headers with hyperref:
99
+ \pdfstringdefDisableCommands{\renewcommand{\sout}{}}
100
+ $endif$
101
+ \setlength{\parindent}{0pt}
102
+ \setlength{\parskip}{6pt plus 2pt minus 1pt}
103
+ \setlength{\emergencystretch}{3em} % prevent overfull lines
104
+ $if(numbersections)$
105
+ $else$
106
+ \setcounter{secnumdepth}{0}
107
+ $endif$
108
+ $if(verbatim-in-note)$
109
+ \VerbatimFootnotes % allows verbatim text in footnotes
110
+ $endif$
111
+ $if(lang)$
112
+ \ifxetex
113
+ \usepackage{polyglossia}
114
+ \setmainlanguage{$mainlang$}
115
+ \else
116
+ \usepackage[$lang$]{babel}
117
+ \fi
118
+ $endif$
119
+ $for(header-includes)$
120
+ $header-includes$
121
+ $endfor$
122
+
123
+ \newlength{\methwidth}
124
+ \setlength{\methwidth}{0.8in}
125
+ \newlength{\defnwidth}
126
+ \setlength{\defnwidth}{\textwidth}
127
+ \addtolength{\defnwidth}{-2.0in}
128
+ \newlength{\returnwidth}
129
+ \setlength{\returnwidth}{0.8in}
130
+ \def\qquad{\quad\quad}
131
+ \def\qqqquad{\quad\quad\quad\quad}
132
+
133
+ $if(title)$
134
+ \title{$title$}
135
+ $endif$
136
+ \author{$for(author)$$author$$sep$ \and $endfor$}
137
+ \date{$date$}
138
+
139
+ \begin{document}
140
+ $if(title)$
141
+ \maketitle
142
+ $endif$
143
+
144
+ $for(include-before)$
145
+ $include-before$
146
+
147
+ $endfor$
148
+ $if(toc)$
149
+ {
150
+ \hypersetup{linkcolor=black}
151
+ \tableofcontents
152
+ }
153
+ $endif$
154
+ $body$
155
+
156
+ $if(natbib)$
157
+ $if(biblio-files)$
158
+ $if(biblio-title)$
159
+ $if(book-class)$
160
+ \renewcommand\bibname{$biblio-title$}
161
+ $else$
162
+ \renewcommand\refname{$biblio-title$}
163
+ $endif$
164
+ $endif$
165
+ \bibliography{$biblio-files$}
166
+
167
+ $endif$
168
+ $endif$
169
+ $if(biblatex)$
170
+ \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
171
+
172
+ $endif$
173
+ $for(include-after)$
174
+ $include-after$
175
+
176
+ $endfor$
177
+ \end{document}
@@ -0,0 +1,66 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ # All tests adapted from MPC 1.0.1's tests/acos.dat
4
+ describe MPC, '#acos' do
5
+ it 'should calculate the inverse cosine of a pure real argument' do
6
+ data = [
7
+ [[ "0x1921FB54442D18p-51", 53, 16], [ "0x13D2B7539DBA4Cp-51", 53, 16], MPC.new([GMP::F(-6 ), -GMP::F(0)])],
8
+ [[ "0x1921FB54442D18p-51", 53, 16], ["-0x13D2B7539DBA4Cp-51", 53, 16], MPC.new([GMP::F(-6 ), GMP::F(0)])],
9
+ [[ "0x1921FB54442D18p-51", 53, 16], [ "0x15124271980435p-52", 53, 16], MPC.new([GMP::F(-2 ), -GMP::F(0)])],
10
+ [[ "0x1921FB54442D18p-51", 53, 16], ["-0x15124271980435p-52", 53, 16], MPC.new([GMP::F(-2 ), GMP::F(0)])],
11
+ [[ "0x1921FB54442D18p-51", 53, 16], [0], MPC.new([GMP::F(-1 ), -GMP::F(0)])],
12
+ [[ "0x1921FB54442D18p-51", 53, 16], [0], MPC.new([GMP::F(-1 ), GMP::F(0)])],
13
+ [[ "0x10C152382D7366p-51", 53, 16], [0], MPC.new([GMP::F(-0.5), -GMP::F(0)])],
14
+ [[ "0x10C152382D7366p-51", 53, 16], [0], MPC.new([GMP::F(-0.5), GMP::F(0)])],
15
+ [[ "0x10C152382D7366p-52", 53, 16], [0], MPC.new([GMP::F( 0.5), GMP::F(0)])],
16
+ [[ "0x10C152382D7366p-52", 53, 16], [0], MPC.new([GMP::F( 0.5), -GMP::F(0)])],
17
+ [[0], [0], MPC.new([GMP::F( 1 ), GMP::F(0)])],
18
+ [[0], [0], MPC.new([GMP::F( 1 ), -GMP::F(0)])],
19
+ [[0], ["-0x15124271980435p-52", 53, 16], MPC.new([GMP::F( 2 ), GMP::F(0)])],
20
+ [[0], [ "0x15124271980435p-52", 53, 16], MPC.new([GMP::F( 2 ), -GMP::F(0)])],
21
+ [[0], ["-0x13D2B7539DBA4Cp-51", 53, 16], MPC.new([GMP::F( 6 ), GMP::F(0)])],
22
+ [[0], [ "0x13D2B7539DBA4Cp-51", 53, 16], MPC.new([GMP::F( 6 ), -GMP::F(0)])]
23
+ ]
24
+ data.each do |expected_real, expected_imag, input|
25
+ actual = input.acos
26
+ actual.real.should eq GMP::F.new(*expected_real)
27
+ actual.imag.should eq GMP::F.new(*expected_imag)
28
+ end
29
+ end
30
+
31
+ it 'should calculate the inverse cosine of a pure imaginary argument' do
32
+ data = [
33
+ [["0x1921FB54442D18p-52", 53, 16], [ "0x1D185B507EDC0Ep-52", 53, 16], MPC.new([-GMP::F(0), GMP::F(-3 )])],
34
+ [["0x1921FB54442D18p-52", 53, 16], [ "0x1D185B507EDC0Ep-52", 53, 16], MPC.new([ GMP::F(0), GMP::F(-3 )])],
35
+ [["0x1921FB54442D18p-52", 53, 16], [ "0x1FACFB2399E637p-55", 53, 16], MPC.new([-GMP::F(0), GMP::F(-0.25)])],
36
+ [["0x1921FB54442D18p-52", 53, 16], [ "0x1FACFB2399E637p-55", 53, 16], MPC.new([ GMP::F(0), GMP::F(-0.25)])],
37
+ [["0x1921FB54442D18p-52", 53, 16], ["-0x1FACFB2399E637p-55", 53, 16], MPC.new([-GMP::F(0), GMP::F( 0.25)])],
38
+ [["0x1921FB54442D18p-52", 53, 16], ["-0x1FACFB2399E637p-55", 53, 16], MPC.new([ GMP::F(0), GMP::F( 0.25)])],
39
+ [["0x1921FB54442D18p-52", 53, 16], ["-0x1D185B507EDC0Ep-52", 53, 16], MPC.new([-GMP::F(0), GMP::F( 3 )])],
40
+ [["0x1921FB54442D18p-52", 53, 16], ["-0x1D185B507EDC0Ep-52", 53, 16], MPC.new([ GMP::F(0), GMP::F( 3 )])],
41
+ ]
42
+ data.each do |expected_real, expected_imag, input|
43
+ actual = input.acos
44
+ actual.real.should eq GMP::F.new(*expected_real)
45
+ actual.imag.should eq GMP::F.new(*expected_imag)
46
+ end
47
+ end
48
+
49
+ it 'should calculate the inverse cosine with other precisions' do
50
+ actual = MPC.new([GMP::F.new(2), GMP::F.new(1)]).acos(MPC::MPC_RNDNZ, 2)
51
+ actual.real.should eq GMP::F.new( 0.5, 2)
52
+ actual.imag.should eq GMP::F.new(-1, 2)
53
+ end
54
+
55
+ it 'should calculate the inverse cosine with other precisions' do
56
+ actual = MPC.new([GMP::F.new(8.5), GMP::F.new(-71)]).acos(MPC::MPC_RNDNU, 9)
57
+ actual.real.should eq GMP::F.new("0x5Dp-6", 9, 16)
58
+ actual.imag.should eq GMP::F.new("0x9Fp-5", 9, 16)
59
+ end
60
+
61
+ it 'should calculate the inverse cosine with other precisions' do
62
+ actual = MPC.new([GMP::F.new("0x3243F6A8885A3p-48", 53, 16), GMP::F.new("0x162E42FEFA39EFp-53", 53, 16)]).acos
63
+ actual.real.should eq GMP::F.new("0x74C141310E695p-53", 53, 16)
64
+ actual.imag.should eq GMP::F.new("-0x1D6D2CFA9F3F11p-52", 53, 16)
65
+ end
66
+ end
@@ -0,0 +1,51 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ describe MPC, '#add' do
4
+ it 'should calculate the sum of an MPC and a Fixnum' do
5
+ op1 = MPC.new([7, 16])
6
+ actual = op1.add(0)
7
+ actual.real.should eq 7
8
+ actual.imag.should eq 16
9
+
10
+ actual = op1.add(6)
11
+ actual.real.should eq 13
12
+ actual.imag.should eq 16
13
+
14
+ actual = op1.add(-1000)
15
+ actual.real.should eq -993
16
+ actual.imag.should eq 16
17
+
18
+ op1 = MPC.new([GMP::F(3.1), GMP::F(16)])
19
+ actual = op1.add(3)
20
+ actual.real.should eq GMP::F(6.1)
21
+ actual.imag.should eq 16
22
+ end
23
+
24
+ it 'should calculate the sum of an MPC and a GMP::Z' do
25
+ op1 = MPC.new([7, 16])
26
+ actual = op1.add(GMP::Z(0))
27
+ actual.real.should eq 7
28
+ actual.imag.should eq 16
29
+
30
+ actual = op1.add(GMP::Z(-1000))
31
+ actual.real.should eq -993
32
+ actual.imag.should eq 16
33
+
34
+ op1 = MPC.new([GMP::F(3.1), GMP::F(16)])
35
+ actual = op1.add(GMP::Z(3))
36
+ actual.real.should eq GMP::F(6.1)
37
+ actual.imag.should eq 16
38
+ end
39
+
40
+ it 'should calculate the sum of an MPC and a Bignum' do
41
+ op1 = MPC.new([7, 16])
42
+ actual = op1.add(2**65) # 36893488147419103232
43
+ actual.real.should eq 36893488147419103239
44
+ actual.imag.should eq 16
45
+
46
+ op1 = MPC.new([GMP::F(3.1), GMP::F(16)])
47
+ actual = op1.add(2**65) # 36893488147419103232
48
+ actual.real.should eq GMP::F("36893488147419103235.1")
49
+ actual.imag.should eq 16
50
+ end
51
+ end
@@ -0,0 +1,54 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ # All tests adapted from MPC 1.0.1's tests/add.dat
4
+ describe MPC, '#add' do
5
+ it 'should calculate the sum of two real MPCs' do
6
+ op1 = MPC.new([1, 0])
7
+ op2_106 = GMP::F("0x10000000000001p-106", 53, 16)
8
+ actual = op1.add(op2_106, MPC::MPC_RNDNN)
9
+ actual.real.should eq GMP::F("0x10000000000000p-52", 53, 16)
10
+ actual.imag.should eq GMP::F(0)
11
+
12
+ op2_105 = GMP::F("0x10000000000001p-105", 53, 16)
13
+ actual = op1.add(op2_105, MPC::MPC_RNDNN)
14
+ actual.real.should eq GMP::F("0x10000000000001p-52", 53, 16)
15
+ actual.imag.should eq GMP::F(0)
16
+
17
+ op2_104 = GMP::F("0x10000000000001p-104", 53, 16)
18
+ actual = op1.add(op2_104, MPC::MPC_RNDNN)
19
+ actual.real.should eq GMP::F("0x10000000000001p-52", 53, 16)
20
+ actual.imag.should eq GMP::F(0)
21
+
22
+ actual = op1.add(op2_105, MPC::MPC_RNDZZ)
23
+ actual.real.should eq GMP::F("0x10000000000000p-52", 53, 16)
24
+ actual.imag.should eq GMP::F(0)
25
+
26
+ actual = op1.add(op2_105, MPC::MPC_RNDUU)
27
+ actual.real.should eq GMP::F("0x10000000000001p-52", 53, 16)
28
+ actual.imag.should eq GMP::F(0)
29
+
30
+ actual = op1.add(op2_105, MPC::MPC_RNDDD)
31
+ actual.real.should eq GMP::F("0x10000000000000p-52", 53, 16)
32
+ actual.imag.should eq GMP::F(0)
33
+ end
34
+
35
+ it 'should calculate the sum of an imaginary argument with a complex one.' do
36
+ op1 = MPC.new([0, 1])
37
+ op2 = GMP::F(1)
38
+ actual = op1.add(op2, MPC::MPC_RNDNN)
39
+ actual.real.should eq GMP::F(1)
40
+ actual.imag.should eq GMP::F(1)
41
+
42
+ actual = op1.add(op2, MPC::MPC_RNDZZ)
43
+ actual.real.should eq GMP::F(1)
44
+ actual.imag.should eq GMP::F(1)
45
+
46
+ actual = op1.add(op2, MPC::MPC_RNDUU)
47
+ actual.real.should eq GMP::F(1)
48
+ actual.imag.should eq GMP::F(1)
49
+
50
+ actual = op1.add(op2, MPC::MPC_RNDDD)
51
+ actual.real.should eq GMP::F(1)
52
+ actual.imag.should eq GMP::F(1)
53
+ end
54
+ end
@@ -0,0 +1,32 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ # All tests adapted from MPC 1.0.1's tests/add.dat
4
+ describe MPC, '#add' do
5
+ it 'should calculate the sum of two real MPCs' do
6
+ op1 = MPC.new([1, 0])
7
+ op2 = MPC.new([GMP::F("0x10000000000001p-105", 53, 16), GMP::F(0)])
8
+ actual = op1.add(op2, MPC::MPC_RNDNN)
9
+ actual.real.should eq GMP::F("0x10000000000001p-52", 53, 16)
10
+ actual.imag.should eq GMP::F(0)
11
+
12
+ actual = op1.add(op2, MPC::MPC_RNDZZ)
13
+ actual.real.should eq GMP::F("0x10000000000000p-52", 53, 16)
14
+ actual.imag.should eq GMP::F(0)
15
+
16
+ actual = op1.add(op2, MPC::MPC_RNDUU)
17
+ actual.real.should eq GMP::F("0x10000000000001p-52", 53, 16)
18
+ actual.imag.should eq GMP::F(0)
19
+
20
+ actual = op1.add(op2, MPC::MPC_RNDDD)
21
+ actual.real.should eq GMP::F("0x10000000000000p-52", 53, 16)
22
+ actual.imag.should eq GMP::F(0)
23
+ end
24
+
25
+ it 'should calculate the sum of two real MPCs' do
26
+ op2 = MPC.new([GMP::F(0), GMP::F("0x10000000000001p-105", 53, 16)])
27
+ op1 = MPC.new([0, 1])
28
+ actual = op1.add(op2, MPC::MPC_RNDNN)
29
+ actual.real.should eq GMP::F(0)
30
+ actual.imag.should eq GMP::F("0x10000000000001p-52", 53, 16)
31
+ end
32
+ end
@@ -0,0 +1,66 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper')
2
+
3
+ # All tests adapted from MPC 1.0.1's tests/asin.dat
4
+ describe MPC, '#sin' do
5
+ it 'should calculate the inverse sine of a pure real argument' do
6
+ data = [
7
+ [["-0x1921FB54442D18p-52", 53, 16], ["-0x1ECC2CAEC5160Ap-53", 53, 16], MPC.new([GMP::F(-1.5), -GMP::F(0)])],
8
+ [["-0x1921FB54442D18p-52", 53, 16], [ "0x1ECC2CAEC5160Ap-53", 53, 16], MPC.new([GMP::F(-1.5), GMP::F(0)])],
9
+ [["-0x1921FB54442D18p-52", 53, 16], [0], MPC.new([GMP::F(-1 ), -GMP::F(0)])],
10
+ [["-0x1921FB54442D18p-52", 53, 16], [0], MPC.new([GMP::F(-1 ), GMP::F(0)])],
11
+ [["-0x10C152382D7366p-53", 53, 16], [0], MPC.new([GMP::F(-0.5), -GMP::F(0)])],
12
+ [["-0x10C152382D7366p-53", 53, 16], [0], MPC.new([GMP::F(-0.5), GMP::F(0)])],
13
+ [[ "0x10C152382D7366p-53", 53, 16], [0], MPC.new([GMP::F( 0.5), -GMP::F(0)])],
14
+ [[ "0x10C152382D7366p-53", 53, 16], [0], MPC.new([GMP::F( 0.5), GMP::F(0)])],
15
+ [[ "0x1921FB54442D18p-52", 53, 16], [0], MPC.new([GMP::F( 1 ), -GMP::F(0)])],
16
+ [[ "0x1921FB54442D18p-52", 53, 16], [0], MPC.new([GMP::F( 1 ), GMP::F(0)])],
17
+ [[ "0x1921FB54442D18p-52", 53, 16], ["-0x1ECC2CAEC5160Ap-53", 53, 16], MPC.new([GMP::F( 1.5), -GMP::F(0)])],
18
+ [[ "0x1921FB54442D18p-52", 53, 16], [ "0x1ECC2CAEC5160Ap-53", 53, 16], MPC.new([GMP::F( 1.5), GMP::F(0)])]
19
+ ]
20
+ data.each do |expected_real, expected_imag, input|
21
+ actual = input.asin
22
+ actual.real.should eq GMP::F.new(*expected_real)
23
+ actual.imag.should eq GMP::F.new(*expected_imag)
24
+ end
25
+ end
26
+
27
+ it 'should calculate the inverse sine of a pure imaginary argument' do
28
+ data = [
29
+ [[-GMP::F(0)], ["-0x131DC0090B63D8p-52", 53, 16], MPC.new([-GMP::F(0), GMP::F(-1.5)])],
30
+ [[ GMP::F(0)], ["-0x131DC0090B63D8p-52", 53, 16], MPC.new([ GMP::F(0), GMP::F(-1.5)])],
31
+ [[-GMP::F(0)], ["-0x1C34366179D427p-53", 53, 16], MPC.new([-GMP::F(0), GMP::F(-1 )])],
32
+ [[ GMP::F(0)], ["-0x1C34366179D427p-53", 53, 16], MPC.new([ GMP::F(0), GMP::F(-1 )])],
33
+ [[-GMP::F(0)], ["-0x1ECC2CAEC5160Ap-54", 53, 16], MPC.new([-GMP::F(0), GMP::F(-0.5)])],
34
+ [[ GMP::F(0)], ["-0x1ECC2CAEC5160Ap-54", 53, 16], MPC.new([ GMP::F(0), GMP::F(-0.5)])],
35
+ [[-GMP::F(0)], [ "0x1ECC2CAEC5160Ap-54", 53, 16], MPC.new([-GMP::F(0), GMP::F( 0.5)])],
36
+ [[ GMP::F(0)], [ "0x1ECC2CAEC5160Ap-54", 53, 16], MPC.new([ GMP::F(0), GMP::F( 0.5)])],
37
+ [[-GMP::F(0)], [ "0x1C34366179D427p-53", 53, 16], MPC.new([-GMP::F(0), GMP::F( 1 )])],
38
+ [[ GMP::F(0)], [ "0x1C34366179D427p-53", 53, 16], MPC.new([ GMP::F(0), GMP::F( 1 )])],
39
+ [[-GMP::F(0)], [ "0x131DC0090B63D8p-52", 53, 16], MPC.new([-GMP::F(0), GMP::F( 1.5)])],
40
+ [[ GMP::F(0)], [ "0x131DC0090B63D8p-52", 53, 16], MPC.new([ GMP::F(0), GMP::F( 1.5)])]
41
+ ]
42
+ data.each do |expected_real, expected_imag, input|
43
+ actual = input.asin
44
+ actual.real.should eq GMP::F.new(*expected_real)
45
+ actual.imag.should eq GMP::F.new(*expected_imag)
46
+ end
47
+ end
48
+
49
+ it 'should calculate the inverse sine of ieee-754 double precision numbers' do
50
+ actual = MPC.new([GMP::F.new(17), GMP::F.new(42)]).asin(MPC::MPC_RNDNN)
51
+ actual.real.should eq GMP::F.new("0x189BF9EC7FCD5Bp-54", 53, 16)
52
+ actual.imag.should eq GMP::F.new("0x1206ECFA94614Bp-50", 53, 16)
53
+ end
54
+
55
+ it 'should calculate the inverse sine with other precisions' do
56
+ actual = MPC.new([GMP::F.new(96), GMP::F.new("0x1p-8", 2, 16)]).asin(MPC::MPC_RNDNN, 2)
57
+ actual.real.should eq GMP::F.new(1.5, 2)
58
+ actual.imag.should eq GMP::F.new(6, 2)
59
+ end
60
+
61
+ it 'should calculate the inverse sine with other precisions' do
62
+ actual = MPC.new([GMP::F.new(96), GMP::F.new("0x1p-8", 2, 16)]).asin(MPC::MPC_RNDNN, 8)
63
+ actual.real.should eq GMP::F.new("0xC9p-7", 8, 16)
64
+ actual.imag.should eq GMP::F.new("0x15p-2", 8, 16)
65
+ end
66
+ end