number 0.9.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.
- data/ext/bounds.c +116 -0
- data/ext/compare.c +706 -0
- data/ext/complex.c +674 -0
- data/ext/decompose.c +231 -0
- data/ext/extconf.rb +7 -0
- data/ext/interval.c +394 -0
- data/ext/number.c +1651 -0
- data/ext/number.h +92 -0
- data/ext/real.c +877 -0
- data/ext/real_bounds.c +57 -0
- data/ext/round.c +46 -0
- metadata +69 -0
data/ext/real_bounds.c
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
#include "number.h"
|
2
|
+
|
3
|
+
void real_bounds_free (RealBounds* bounds)
|
4
|
+
{
|
5
|
+
if (bounds)
|
6
|
+
{
|
7
|
+
if (bounds->min)
|
8
|
+
{
|
9
|
+
real_free(bounds->min);
|
10
|
+
}
|
11
|
+
|
12
|
+
if (bounds->max)
|
13
|
+
{
|
14
|
+
real_free(bounds->max);
|
15
|
+
}
|
16
|
+
|
17
|
+
free(bounds);
|
18
|
+
bounds = NULL;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
void real_bounds_update (RealBounds* bounds, Real* real, int closed)
|
23
|
+
{
|
24
|
+
int min_cmp;
|
25
|
+
int max_cmp;
|
26
|
+
|
27
|
+
if (!bounds->min || (min_cmp = real_cmp(bounds->min, real)) != -1)
|
28
|
+
{
|
29
|
+
real_free(bounds->min);
|
30
|
+
|
31
|
+
bounds->min = (Real*)real_dup(real);
|
32
|
+
bounds->min_closed = (min_cmp) ? closed : bounds->min_closed || closed;
|
33
|
+
}
|
34
|
+
|
35
|
+
if (!bounds->max || (max_cmp = real_cmp(bounds->max, real)) != 1)
|
36
|
+
{
|
37
|
+
real_free(bounds->max);
|
38
|
+
|
39
|
+
bounds->max = (Real*)real_dup(real);
|
40
|
+
bounds->max_closed = (max_cmp) ? closed : bounds->max_closed || closed;
|
41
|
+
}
|
42
|
+
|
43
|
+
real_free(real);
|
44
|
+
}
|
45
|
+
|
46
|
+
RealBounds* real_bounds_new ()
|
47
|
+
{
|
48
|
+
RealBounds* bounds;
|
49
|
+
bounds = malloc(sizeof(RealBounds));
|
50
|
+
|
51
|
+
if (bounds == NULL)
|
52
|
+
{
|
53
|
+
return NULL;
|
54
|
+
}
|
55
|
+
|
56
|
+
memset(bounds, 0, sizeof(RealBounds));
|
57
|
+
}
|
data/ext/round.c
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#include "number.h"
|
2
|
+
|
3
|
+
Complex* complex_round (Complex* complex)
|
4
|
+
{
|
5
|
+
return (Complex*)complex_new((Interval*)interval_round(complex->re), (Interval*)interval_round(complex->im));
|
6
|
+
}
|
7
|
+
|
8
|
+
Complex* complex_round_c_c (Complex* complex)
|
9
|
+
{
|
10
|
+
return (Complex*)complex_new((Interval*)interval_round_ceiling(complex->re), (Interval*)interval_round_ceiling(complex->im));
|
11
|
+
}
|
12
|
+
|
13
|
+
Complex* complex_round_c_f (Complex* complex)
|
14
|
+
{
|
15
|
+
return (Complex*)complex_new((Interval*)interval_round_floor(complex->re), (Interval*)interval_round_ceiling(complex->im));
|
16
|
+
}
|
17
|
+
|
18
|
+
Complex* complex_round_f_c (Complex* complex)
|
19
|
+
{
|
20
|
+
return (Complex*)complex_new((Interval*)interval_round_ceiling(complex->re), (Interval*)interval_round_floor(complex->im));
|
21
|
+
}
|
22
|
+
|
23
|
+
Complex* complex_round_f_f (Complex* complex)
|
24
|
+
{
|
25
|
+
return (Complex*)complex_new((Interval*)interval_round_floor(complex->re), (Interval*)interval_round_floor(complex->im));
|
26
|
+
}
|
27
|
+
|
28
|
+
Complex* complex_round_i_i (Complex* complex)
|
29
|
+
{
|
30
|
+
return (Complex*)complex_new((Interval*)interval_round_infinity(complex->re), (Interval*)interval_round_infinity(complex->im));
|
31
|
+
}
|
32
|
+
|
33
|
+
Complex* complex_round_i_o (Complex* complex)
|
34
|
+
{
|
35
|
+
return (Complex*)complex_new((Interval*)interval_round_infinity(complex->re), (Interval*)interval_round_origin(complex->im));
|
36
|
+
}
|
37
|
+
|
38
|
+
Complex* complex_round_o_i (Complex* complex)
|
39
|
+
{
|
40
|
+
return (Complex*)complex_new((Interval*)interval_round_origin(complex->re), (Interval*)interval_round_infinity(complex->im));
|
41
|
+
}
|
42
|
+
|
43
|
+
Complex* complex_round_o_o (Complex* complex)
|
44
|
+
{
|
45
|
+
return (Complex*)complex_new((Interval*)interval_round_origin(complex->re), (Interval*)interval_round_origin(complex->im));
|
46
|
+
}
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: number
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.9.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Jesse Sielaff
|
9
|
+
- Dane Hillard
|
10
|
+
- Trek Glowacki
|
11
|
+
autorequire:
|
12
|
+
bindir: bin
|
13
|
+
cert_chain: []
|
14
|
+
|
15
|
+
date: 2011-07-15 00:00:00 Z
|
16
|
+
dependencies: []
|
17
|
+
|
18
|
+
description: The Number gem is intended to be a drop-in replacement for Ruby's Numeric classes when arbitrary-precision complex interval calculations are warranted. The basis of the arbitrary-precision calculations is the GNU MP, MPFR, and MPC libraries.
|
19
|
+
email: jesse.sielaff@gmail.com
|
20
|
+
executables: []
|
21
|
+
|
22
|
+
extensions:
|
23
|
+
- ext/extconf.rb
|
24
|
+
extra_rdoc_files: []
|
25
|
+
|
26
|
+
files:
|
27
|
+
- ext/bounds.c
|
28
|
+
- ext/compare.c
|
29
|
+
- ext/complex.c
|
30
|
+
- ext/decompose.c
|
31
|
+
- ext/extconf.rb
|
32
|
+
- ext/interval.c
|
33
|
+
- ext/number.c
|
34
|
+
- ext/number.h
|
35
|
+
- ext/real.c
|
36
|
+
- ext/real_bounds.c
|
37
|
+
- ext/round.c
|
38
|
+
homepage:
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
- ext
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 1.9.2
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
requirements:
|
60
|
+
- GMP
|
61
|
+
- MPFR
|
62
|
+
- MPC
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 1.8.1
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: An arbitrary-precision complex interval number library for Ruby.
|
68
|
+
test_files: []
|
69
|
+
|