numo-narray 0.9.0.1-x86-mingw32 → 0.9.0.3-x86-mingw32
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.
- checksums.yaml +4 -4
- data/README.md +11 -7
- data/Rakefile +21 -6
- data/ext/numo/narray/array.c +3 -3
- data/ext/numo/narray/data.c +102 -81
- data/ext/numo/narray/depend.erb +9 -7
- data/ext/numo/narray/extconf.rb +5 -24
- data/ext/numo/narray/gen/cogen.rb +19 -4
- data/ext/numo/narray/gen/def/bit.rb +31 -0
- data/ext/numo/narray/gen/def/robject.rb +1 -1
- data/ext/numo/narray/gen/dtype.erb.c +11 -257
- data/ext/numo/narray/gen/spec.rb +294 -0
- data/ext/numo/narray/gen/tmpl/aset.c +1 -1
- data/ext/numo/narray/gen/tmpl/each_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl/eye.c +5 -5
- data/ext/numo/narray/gen/tmpl/logseq.c +82 -0
- data/ext/numo/narray/gen/tmpl/map_with_index.c +1 -1
- data/ext/numo/narray/gen/tmpl/rand.c +126 -5
- data/ext/numo/narray/gen/tmpl/seq.c +43 -12
- data/ext/numo/narray/gen/tmpl/store_bit.c +55 -0
- data/ext/numo/narray/gen/tmpl_bit/allocate.c +28 -0
- data/ext/numo/narray/gen/tmpl_bit/aref.c +53 -0
- data/ext/numo/narray/gen/tmpl_bit/aset.c +63 -0
- data/ext/numo/narray/gen/{tmpl/bit_binary.c → tmpl_bit/binary.c} +1 -1
- data/ext/numo/narray/gen/{tmpl → tmpl_bit}/bit_count.c +5 -3
- data/ext/numo/narray/gen/tmpl_bit/bit_reduce.c +128 -0
- data/ext/numo/narray/gen/tmpl_bit/cast.c +37 -0
- data/ext/numo/narray/gen/tmpl_bit/cast_array.c +80 -0
- data/ext/numo/narray/gen/tmpl_bit/cast_numeric.c +22 -0
- data/ext/numo/narray/gen/tmpl_bit/coerce_cast.c +8 -0
- data/ext/numo/narray/gen/tmpl_bit/each.c +44 -0
- data/ext/numo/narray/gen/tmpl_bit/each_with_index.c +66 -0
- data/ext/numo/narray/gen/tmpl_bit/extract.c +25 -0
- data/ext/numo/narray/gen/tmpl_bit/fill.c +65 -0
- data/ext/numo/narray/gen/tmpl_bit/format.c +61 -0
- data/ext/numo/narray/gen/tmpl_bit/format_to_a.c +48 -0
- data/ext/numo/narray/gen/tmpl_bit/inspect.c +18 -0
- data/ext/numo/narray/gen/tmpl_bit/map_with_index.c +94 -0
- data/ext/numo/narray/gen/tmpl_bit/mask.c +117 -0
- data/ext/numo/narray/gen/tmpl_bit/none_p.c +14 -0
- data/ext/numo/narray/gen/tmpl_bit/store.c +32 -0
- data/ext/numo/narray/gen/tmpl_bit/store_array.c +5 -0
- data/ext/numo/narray/gen/tmpl_bit/store_bit.c +66 -0
- data/ext/numo/narray/gen/tmpl_bit/store_from.c +56 -0
- data/ext/numo/narray/gen/tmpl_bit/store_numeric.c +22 -0
- data/ext/numo/narray/gen/tmpl_bit/to_a.c +43 -0
- data/ext/numo/narray/gen/{tmpl/bit_unary.c → tmpl_bit/unary.c} +1 -1
- data/ext/numo/narray/gen/tmpl_bit/where.c +102 -0
- data/ext/numo/narray/gen/tmpl_bit/where2.c +37 -0
- data/ext/numo/narray/index.c +9 -7
- data/ext/numo/narray/math.c +6 -1
- data/ext/numo/narray/narray.c +307 -103
- data/ext/numo/narray/ndloop.c +21 -36
- data/ext/numo/narray/numo/intern.h +3 -3
- data/ext/numo/narray/numo/narray.h +5 -41
- data/ext/numo/narray/numo/template.h +2 -2
- data/ext/numo/narray/numo/types/bit.h +27 -13
- data/ext/numo/narray/numo/types/complex.h +2 -2
- data/ext/numo/narray/numo/types/complex_macro.h +19 -7
- data/ext/numo/narray/numo/types/dcomplex.h +9 -0
- data/ext/numo/narray/numo/types/dfloat.h +6 -0
- data/ext/numo/narray/numo/types/float_macro.h +9 -2
- data/ext/numo/narray/numo/types/int16.h +0 -1
- data/ext/numo/narray/numo/types/int32.h +0 -1
- data/ext/numo/narray/numo/types/int64.h +0 -1
- data/ext/numo/narray/numo/types/int8.h +0 -1
- data/ext/numo/narray/numo/types/int_macro.h +2 -1
- data/ext/numo/narray/numo/types/robj_macro.h +9 -2
- data/ext/numo/narray/numo/types/robject.h +6 -0
- data/ext/numo/narray/numo/types/scomplex.h +9 -0
- data/ext/numo/narray/numo/types/sfloat.h +6 -0
- data/ext/numo/narray/numo/types/uint16.h +0 -1
- data/ext/numo/narray/numo/types/uint32.h +0 -1
- data/ext/numo/narray/numo/types/uint64.h +0 -1
- data/ext/numo/narray/numo/types/uint8.h +0 -1
- data/ext/numo/narray/numo/types/uint_macro.h +2 -1
- data/ext/numo/narray/numo/types/xint_macro.h +6 -1
- data/ext/numo/narray/rand.c +2 -2
- data/ext/numo/narray/step.c +7 -7
- data/ext/numo/narray/struct.c +11 -12
- data/lib/2.0/numo/narray.so +0 -0
- data/lib/2.1/numo/narray.so +0 -0
- data/lib/2.2/numo/narray.so +0 -0
- data/lib/2.3/numo/narray.so +0 -0
- data/lib/2.4/numo/narray.so +0 -0
- data/lib/erbpp.rb +6 -2
- data/lib/erbpp/line_number.rb +1 -1
- data/lib/erbpp/narray_def.rb +23 -19
- data/numo-narray.gemspec +2 -2
- metadata +45 -10
- data/ext/numo/narray/gen/bit.erb.c +0 -811
data/ext/numo/narray/ndloop.c
CHANGED
@@ -73,7 +73,7 @@ typedef struct NA_MD_LOOP {
|
|
73
73
|
|
74
74
|
#define NDL_READ 1
|
75
75
|
#define NDL_WRITE 2
|
76
|
-
#define NDL_READ_WRITE
|
76
|
+
#define NDL_READ_WRITE (NDL_READ|NDL_WRITE)
|
77
77
|
|
78
78
|
static inline VALUE
|
79
79
|
nary_type_s_cast(VALUE type, VALUE obj)
|
@@ -153,7 +153,7 @@ print_ndloop(na_md_loop_t *lp) {
|
|
153
153
|
printf("--user.args[%d]--\n", j);
|
154
154
|
printf(" user.args[%d].ptr = 0x%"SZF"x\n", j, (size_t)LARG(lp,j).ptr);
|
155
155
|
printf(" user.args[%d].elmsz = %"SZF"d\n", j, LARG(lp,j).elmsz);
|
156
|
-
printf(" user.args[%d].value = 0x%"
|
156
|
+
printf(" user.args[%d].value = 0x%"PRI_VALUE_PREFIX"x\n", j, LARG(lp,j).value);
|
157
157
|
printf(" user.args[%d].ndim = %d\n", j, LARG(lp,j).ndim);
|
158
158
|
printf(" user.args[%d].shape = 0x%"SZF"x\n", j, (size_t)LARG(lp,j).shape);
|
159
159
|
if (LARG(lp,j).shape) {
|
@@ -253,7 +253,7 @@ ndloop_cast_args(ndfunc_t *nf, VALUE args)
|
|
253
253
|
value = RARRAY_AREF(args,j);
|
254
254
|
if (!ndloop_cast_required(type, value))
|
255
255
|
continue;
|
256
|
-
|
256
|
+
|
257
257
|
if (ndloop_castable_type(type)) {
|
258
258
|
RARRAY_ASET(args,j,nary_type_s_cast(type, value));
|
259
259
|
copy_flag |= 1<<j;
|
@@ -300,7 +300,7 @@ ndloop_find_max_dimension(na_md_loop_t *lp, ndfunc_t *nf, VALUE args)
|
|
300
300
|
int nin=0; // number of input objects (except for symbols)
|
301
301
|
int user_nd=0; // max dimension of user function
|
302
302
|
int loop_nd=0; // max dimension of md-loop
|
303
|
-
|
303
|
+
|
304
304
|
for (j=0; j<RARRAY_LEN(args); j++) {
|
305
305
|
VALUE t = nf->ain[j].type;
|
306
306
|
VALUE v = RARRAY_AREF(args,j);
|
@@ -309,7 +309,7 @@ ndloop_find_max_dimension(na_md_loop_t *lp, ndfunc_t *nf, VALUE args)
|
|
309
309
|
} else {
|
310
310
|
nin++;
|
311
311
|
user_nd = max2(user_nd, nf->ain[j].dim);
|
312
|
-
if (IsNArray(v))
|
312
|
+
if (IsNArray(v))
|
313
313
|
loop_nd = max2(loop_nd, RNARRAY_NDIM(v) - nf->ain[j].dim);
|
314
314
|
}
|
315
315
|
}
|
@@ -377,7 +377,7 @@ ndloop_alloc(na_md_loop_t *lp, ndfunc_t *nf, VALUE args,
|
|
377
377
|
ndloop_find_max_dimension(lp, nf, args);
|
378
378
|
narg = lp->nin + nf->nout;
|
379
379
|
max_nd = lp->ndim + lp->user.ndim;
|
380
|
-
|
380
|
+
|
381
381
|
lp->n = lp->n_ptr = ALLOC_N(size_t, max_nd+1);
|
382
382
|
lp->xargs = ALLOC_N(na_loop_xargs_t, narg);
|
383
383
|
lp->user.args = ALLOC_N(na_loop_args_t, narg);
|
@@ -535,11 +535,14 @@ ndloop_set_stepidx(na_md_loop_t *lp, int j, VALUE vna, int *dim_map, int rwflag)
|
|
535
535
|
|
536
536
|
LARG(lp,j).value = vna;
|
537
537
|
LARG(lp,j).elmsz = na_get_elmsz(vna);
|
538
|
-
if (rwflag
|
538
|
+
if (rwflag == NDL_READ) {
|
539
539
|
LARG(lp,j).ptr = na_get_pointer_for_read(vna);
|
540
540
|
} else
|
541
|
-
if (rwflag
|
541
|
+
if (rwflag == NDL_WRITE) {
|
542
542
|
LARG(lp,j).ptr = na_get_pointer_for_write(vna);
|
543
|
+
} else
|
544
|
+
if (rwflag == NDL_READ_WRITE) {
|
545
|
+
LARG(lp,j).ptr = na_get_pointer_for_read_write(vna);
|
543
546
|
} else {
|
544
547
|
rb_bug("invalid value for read-write flag");
|
545
548
|
}
|
@@ -890,7 +893,8 @@ ndfunc_contract_loop(na_md_loop_t *lp)
|
|
890
893
|
}
|
891
894
|
}
|
892
895
|
if (success) {
|
893
|
-
//printf("contract i=%d-th and %d-th\n",
|
896
|
+
//printf("contract i=%d-th and %d-th, lp->n[%d]=%"SZF"d, lp->n[%d]=%"SZF"d\n",
|
897
|
+
// i-1,i, i,lp->n[i], i-1,lp->n[i-1]);
|
894
898
|
// contract (i-1)-th and i-th dimension
|
895
899
|
lp->n[i] *= lp->n[i-1];
|
896
900
|
// shift dimensions
|
@@ -915,6 +919,7 @@ ndfunc_contract_loop(na_md_loop_t *lp)
|
|
915
919
|
//printf("contract cnt=%d\n",cnt);
|
916
920
|
if (cnt>0) {
|
917
921
|
for (j=0; j<lp->narg; j++) {
|
922
|
+
LITER(lp,cnt,j).pos = LITER(lp,0,j).pos;
|
918
923
|
lp->xargs[j].iter = &LITER(lp,cnt,j);
|
919
924
|
}
|
920
925
|
lp->n = &(lp->n[cnt]);
|
@@ -1312,10 +1317,10 @@ ndloop_run(VALUE vlp)
|
|
1312
1317
|
// loop
|
1313
1318
|
(*(lp->loop_func))(nf, lp);
|
1314
1319
|
|
1315
|
-
if (na_debug_flag) {
|
1316
|
-
|
1317
|
-
|
1318
|
-
}
|
1320
|
+
//if (na_debug_flag) {
|
1321
|
+
// printf("-- after loop --\n");
|
1322
|
+
// print_ndloop(lp);
|
1323
|
+
//}
|
1319
1324
|
|
1320
1325
|
if (RTEST(lp->user.err_type)) {
|
1321
1326
|
rb_raise(lp->user.err_type, "error in NArray operation");
|
@@ -1531,25 +1536,9 @@ na_info_str(VALUE ary)
|
|
1531
1536
|
|
1532
1537
|
//----------------------------------------------------------------------
|
1533
1538
|
|
1534
|
-
|
1535
|
-
|
1536
|
-
|
1537
|
-
VALUE cols, rows;
|
1538
|
-
|
1539
|
-
cols = rb_ivar_get(cNArray,rb_intern("inspect_cols"));
|
1540
|
-
if (RTEST(cols)) {
|
1541
|
-
*ncol = NUM2INT(cols);
|
1542
|
-
} else {
|
1543
|
-
*ncol = 80;
|
1544
|
-
}
|
1545
|
-
|
1546
|
-
rows = rb_ivar_get(cNArray,rb_intern("inspect_rows"));
|
1547
|
-
if (RTEST(rows)) {
|
1548
|
-
*nrow = NUM2INT(rows);
|
1549
|
-
} else {
|
1550
|
-
*nrow = 20;
|
1551
|
-
}
|
1552
|
-
}
|
1539
|
+
#define ncol numo_na_inspect_cols
|
1540
|
+
#define nrow numo_na_inspect_rows
|
1541
|
+
extern int ncol, nrow;
|
1553
1542
|
|
1554
1543
|
static void
|
1555
1544
|
loop_inspect(ndfunc_t *nf, na_md_loop_t *lp)
|
@@ -1559,8 +1548,6 @@ loop_inspect(ndfunc_t *nf, na_md_loop_t *lp)
|
|
1559
1548
|
int col=0, row=0;
|
1560
1549
|
long len;
|
1561
1550
|
VALUE str;
|
1562
|
-
int ncol;
|
1563
|
-
int nrow;
|
1564
1551
|
na_text_func_t func = (na_text_func_t)(nf->func);
|
1565
1552
|
VALUE buf, opt;
|
1566
1553
|
|
@@ -1587,8 +1574,6 @@ loop_inspect(ndfunc_t *nf, na_md_loop_t *lp)
|
|
1587
1574
|
rb_str_cat(buf,"",0);
|
1588
1575
|
}
|
1589
1576
|
|
1590
|
-
ndloop_inspect_get_width(&ncol,&nrow);
|
1591
|
-
|
1592
1577
|
col = nd*2;
|
1593
1578
|
for (i=0;;) {
|
1594
1579
|
if (i<nd-1) {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
intern.h
|
3
3
|
Numerical Array Extension for Ruby
|
4
|
-
(C) Copyright 1999-
|
4
|
+
(C) Copyright 1999-2016 by Masahiro TANAKA
|
5
5
|
|
6
6
|
This program is free software.
|
7
7
|
You can distribute/modify this program
|
@@ -19,6 +19,7 @@ VALUE na_original_data(VALUE self);
|
|
19
19
|
VALUE na_make_view(VALUE self);
|
20
20
|
VALUE na_make_view_struct(VALUE self, VALUE dtype, VALUE offset);
|
21
21
|
void na_array_to_internal_shape(VALUE self, VALUE ary, size_t *shape);
|
22
|
+
VALUE na_expand_dims(VALUE self, VALUE vdim);
|
22
23
|
|
23
24
|
VALUE na_reduce_dimension(int argc, VALUE *argv, int naryc, VALUE *naryv);
|
24
25
|
|
@@ -37,7 +38,7 @@ VALUE na_sort_index_main(int argc, VALUE *argv, VALUE self, void (*func_qsort)()
|
|
37
38
|
char *na_get_pointer(VALUE);
|
38
39
|
char *na_get_pointer_for_write(VALUE);
|
39
40
|
char *na_get_pointer_for_read(VALUE);
|
40
|
-
char *
|
41
|
+
char *na_get_pointer_for_read_write(VALUE);
|
41
42
|
|
42
43
|
size_t na_get_offset(VALUE self);
|
43
44
|
|
@@ -50,7 +51,6 @@ void na_alloc_index(narray_t *na);
|
|
50
51
|
void na_copy_flags(VALUE src, VALUE dst);
|
51
52
|
|
52
53
|
VALUE na_flatten(VALUE);
|
53
|
-
VALUE na_dup(VALUE);
|
54
54
|
VALUE na_copy(VALUE);
|
55
55
|
VALUE na_upcast(VALUE type1, VALUE type2);
|
56
56
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
narray.h
|
3
3
|
Numerical Array Extension for Ruby
|
4
|
-
(C) Copyright 1999-
|
4
|
+
(C) Copyright 1999-2016 by Masahiro TANAKA
|
5
5
|
|
6
6
|
This program is free software.
|
7
7
|
You can distribute/modify this program
|
@@ -11,14 +11,13 @@
|
|
11
11
|
#ifndef NARRAY_H
|
12
12
|
#define NARRAY_H
|
13
13
|
|
14
|
-
#define NARRAY_VERSION "0.9.0.
|
15
|
-
#define NARRAY_VERSION_CODE
|
14
|
+
#define NARRAY_VERSION "0.9.0.3"
|
15
|
+
#define NARRAY_VERSION_CODE 903
|
16
16
|
|
17
17
|
#include <math.h>
|
18
18
|
#include "numo/compat.h"
|
19
19
|
#include "numo/template.h"
|
20
|
-
|
21
|
-
#include "extconf.h"
|
20
|
+
#include "numo/extconf.h"
|
22
21
|
|
23
22
|
#ifdef HAVE_STDBOOL_H
|
24
23
|
# include <stdbool.h>
|
@@ -56,19 +55,7 @@
|
|
56
55
|
# endif
|
57
56
|
#endif
|
58
57
|
|
59
|
-
#
|
60
|
-
# define NUM2SIZE(x) NUM2ULONG(x)
|
61
|
-
# define NUM2SSIZE(x) NUM2LONG(x)
|
62
|
-
# define SIZE2NUM(x) ULONG2NUM(x)
|
63
|
-
# define SSIZE2NUM(x) LONG2NUM(x)
|
64
|
-
# define SZF "l"
|
65
|
-
#elif SIZEOF_VOIDP==SIZEOF_LONG_LONG
|
66
|
-
# define NUM2SIZE(x) NUM2ULL(x)
|
67
|
-
# define NUM2SSIZE(x) NUM2LL(x)
|
68
|
-
# define SIZE2NUM(x) ULL2NUM(x)
|
69
|
-
# define SSIZE2NUM(x) LL2NUM(x)
|
70
|
-
# define SZF "ll"
|
71
|
-
#endif
|
58
|
+
#define SZF PRI_SIZE_PREFIX // defined in ruby.h
|
72
59
|
|
73
60
|
#if SIZEOF_LONG==8
|
74
61
|
# define NUM2INT64(x) NUM2LONG(x)
|
@@ -358,13 +345,10 @@ _na_get_narray_t(VALUE obj, unsigned char na_type)
|
|
358
345
|
#endif
|
359
346
|
#endif
|
360
347
|
|
361
|
-
|
362
348
|
#define IsNArray(obj) (rb_obj_is_kind_of(obj,cNArray)==Qtrue)
|
363
349
|
|
364
350
|
#define DEBUG_PRINT(v) puts(StringValueCStr(rb_funcall(v,rb_intern("inspect"),0)))
|
365
351
|
|
366
|
-
|
367
|
-
|
368
352
|
#define NA_IsNArray(obj) \
|
369
353
|
(rb_obj_is_kind_of(obj,cNArray)==Qtrue)
|
370
354
|
#define NA_IsArray(obj) \
|
@@ -375,37 +359,17 @@ _na_get_narray_t(VALUE obj, unsigned char na_type)
|
|
375
359
|
|
376
360
|
#define NA_MAX_DIMENSION (int)(sizeof(VALUE)*8-2)
|
377
361
|
|
378
|
-
/* Function Prototypes */
|
379
|
-
|
380
|
-
|
381
|
-
typedef struct {
|
382
|
-
double beg;
|
383
|
-
double step;
|
384
|
-
double count;
|
385
|
-
} seq_opt_t;
|
386
|
-
|
387
|
-
typedef struct {
|
388
|
-
u_int64_t max;
|
389
|
-
int64_t sign;
|
390
|
-
int shift;
|
391
|
-
} rand_opt_t;
|
392
|
-
|
393
|
-
|
394
362
|
typedef unsigned int BIT_DIGIT;
|
395
363
|
//#define BYTE_BIT_DIGIT sizeof(BIT_DIGIT)
|
396
364
|
#define NB (sizeof(BIT_DIGIT)*8)
|
397
365
|
#define BALL (~(BIT_DIGIT)0)
|
398
366
|
#define SLB(n) (((n)==NB)?~(BIT_DIGIT)0:(~(~(BIT_DIGIT)0<<(n))))
|
399
367
|
|
400
|
-
//#include "template.h"
|
401
|
-
|
402
368
|
#define ELEMENT_BIT_SIZE "ELEMENT_BIT_SIZE"
|
403
369
|
#define ELEMENT_BYTE_SIZE "ELEMENT_BYTE_SIZE"
|
404
370
|
#define CONTIGUOUS_STRIDE "CONTIGUOUS_STRIDE"
|
405
371
|
|
406
372
|
#include "numo/ndloop.h"
|
407
|
-
//#include "ndfunc.h"
|
408
|
-
|
409
373
|
#include "numo/intern.h"
|
410
374
|
|
411
375
|
#endif /* ifndef NARRAY_H */
|
@@ -1,19 +1,33 @@
|
|
1
|
-
typedef
|
1
|
+
typedef BIT_DIGIT dtype;
|
2
|
+
typedef BIT_DIGIT rtype;
|
3
|
+
#define cT numo_cBit
|
4
|
+
#define cRT cT
|
2
5
|
|
3
|
-
#define
|
6
|
+
#define m_zero 0
|
7
|
+
#define m_one 1
|
4
8
|
|
5
|
-
#define
|
6
|
-
|
7
|
-
#define m_bit_not(x) (~(x))
|
9
|
+
#define m_abs(x) (x)
|
10
|
+
#define m_sign(x) (((x)==0) ? 0:1)
|
8
11
|
|
9
|
-
#define
|
10
|
-
#define
|
11
|
-
#define
|
12
|
-
#define
|
12
|
+
#define m_from_double(x) (((x)==0) ? 0 : 1)
|
13
|
+
#define m_from_real(x) (((x)==0) ? 0 : 1)
|
14
|
+
#define m_data_to_num(x) INT2FIX(x)
|
15
|
+
#define m_sprintf(s,x) sprintf(s,"%1d",(int)(x))
|
13
16
|
|
14
|
-
#define
|
15
|
-
#define
|
17
|
+
#define m_copy(x) (x)
|
18
|
+
#define m_not(x) (~(x))
|
19
|
+
#define m_and(x,y) ((x)&(y))
|
20
|
+
#define m_or(x,y) ((x)|(y))
|
21
|
+
#define m_xor(x,y) ((x)^(y))
|
22
|
+
#define m_eq(x,y) (~((x)^(y)))
|
23
|
+
#define m_count_true(x) ((x)!=0)
|
24
|
+
#define m_count_false(x) ((x)==0)
|
16
25
|
|
17
|
-
static inline
|
18
|
-
|
26
|
+
static inline BIT_DIGIT m_num_to_data(VALUE num) {
|
27
|
+
if (RTEST(num)) {
|
28
|
+
if (!RTEST(rb_equal(num,INT2FIX(0)))) {
|
29
|
+
return 1;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return 0;
|
19
33
|
}
|
@@ -123,7 +123,7 @@ static inline dtype c_div_r(dtype x, rtype y) {
|
|
123
123
|
return z;
|
124
124
|
}
|
125
125
|
|
126
|
-
static inline dtype
|
126
|
+
static inline dtype c_reciprocal(dtype x) {
|
127
127
|
dtype z;
|
128
128
|
if ( r_abs(REAL(x)) > r_abs(IMAG(x)) ) {
|
129
129
|
IMAG(z) = IMAG(x)/REAL(x);
|
@@ -372,7 +372,7 @@ static inline dtype c_pow_int(dtype x, int p)
|
|
372
372
|
dtype z = c_one();
|
373
373
|
if (p<0) {
|
374
374
|
x = c_pow_int(x,-p);
|
375
|
-
return
|
375
|
+
return c_reciprocal(x);
|
376
376
|
}
|
377
377
|
if (p==2) {return c_square(x);}
|
378
378
|
if (p&1) {z = x;}
|
@@ -61,13 +61,21 @@ static inline dtype c_from_dcomplex(dcomplex x) {
|
|
61
61
|
#define m_pow(x,y) c_pow(x,y)
|
62
62
|
#define m_pow_int(x,y) c_pow_int(x,y)
|
63
63
|
|
64
|
-
#define m_minus(x) c_minus(x)
|
65
|
-
#define m_inverse(x) c_inverse(x)
|
66
|
-
#define m_square(x) c_square(x)
|
67
|
-
#define m_im(x) c_im(x)
|
68
|
-
|
69
|
-
#define m_conj(x) c_new(REAL(x),-IMAG(x))
|
70
64
|
#define m_abs(x) c_abs(x)
|
65
|
+
#define m_minus(x) c_minus(x)
|
66
|
+
#define m_reciprocal(x) c_reciprocal(x)
|
67
|
+
#define m_square(x) c_square(x)
|
68
|
+
#define m_floor(x) c_new(floor(REAL(x)),floor(IMAG(x)))
|
69
|
+
#define m_round(x) c_new(round(REAL(x)),round(IMAG(x)))
|
70
|
+
#define m_ceil(x) c_new(ceil(REAL(x)),ceil(IMAG(x)))
|
71
|
+
#define m_trunc(x) c_new(trunc(REAL(x)),trunc(IMAG(x)))
|
72
|
+
#define m_rint(x) c_new(rint(REAL(x)),rint(IMAG(x)))
|
73
|
+
#define m_sign(x) c_new( \
|
74
|
+
((REAL(x)==0) ? 0.0:((REAL(x)>0) ? 1.0:((REAL(x)<0) ? -1.0:REAL(x)))), \
|
75
|
+
((IMAG(x)==0) ? 0.0:((IMAG(x)>0) ? 1.0:((IMAG(x)<0) ? -1.0:IMAG(x)))))
|
76
|
+
|
77
|
+
#define m_im(x) c_im(x)
|
78
|
+
#define m_conj(x) c_new(REAL(x),-IMAG(x))
|
71
79
|
#define m_arg(x) atan2(IMAG(x),REAL(x))
|
72
80
|
|
73
81
|
#define m_eq(x,y) c_eq(x,y)
|
@@ -84,7 +92,6 @@ static inline dtype c_from_dcomplex(dcomplex x) {
|
|
84
92
|
#define m_mulsum(x,y,z) {z = c_add(c_mul(x,y),z);}
|
85
93
|
#define m_mulsum_init INT2FIX(0)
|
86
94
|
|
87
|
-
#define m_rand c_new(to_res53(gen_rand64()),to_res53(gen_rand64()))
|
88
95
|
#define m_rand_norm(a) rand_norm(a)
|
89
96
|
|
90
97
|
#define m_sprintf(s,x) sprintf(s,"%g%+gi",REAL(x),IMAG(x))
|
@@ -203,3 +210,8 @@ static inline rtype f_rms(size_t n, char *p, ssize_t stride)
|
|
203
210
|
}
|
204
211
|
return r_sqrt(y/count);
|
205
212
|
}
|
213
|
+
|
214
|
+
static inline dtype f_seq(dtype x, dtype y, double c)
|
215
|
+
{
|
216
|
+
return c_add(x,c_mul_r(y,c));
|
217
|
+
}
|
@@ -9,3 +9,12 @@ typedef double rtype;
|
|
9
9
|
static inline bool c_nearly_eq(dtype x, dtype y) {
|
10
10
|
return c_abs(c_sub(x,y)) <= (c_abs(x)+c_abs(y))*DBL_EPSILON*2;
|
11
11
|
}
|
12
|
+
|
13
|
+
/* generates a random number on [0,1)-real-interval */
|
14
|
+
inline static dtype m_rand(dtype max)
|
15
|
+
{
|
16
|
+
dtype z;
|
17
|
+
REAL(z) = genrand_res53_mix() * REAL(max);
|
18
|
+
IMAG(z) = genrand_res53_mix() * IMAG(max);
|
19
|
+
return z;
|
20
|
+
}
|
@@ -6,6 +6,12 @@ typedef double rtype;
|
|
6
6
|
|
7
7
|
#include "float_macro.h"
|
8
8
|
|
9
|
+
/* generates a random number on [0,1)-real-interval */
|
10
|
+
inline static dtype m_rand(dtype max)
|
11
|
+
{
|
12
|
+
return genrand_res53_mix() * max;
|
13
|
+
}
|
14
|
+
|
9
15
|
#define m_min_init numo_dfloat_new_dim0(0.0/0.0)
|
10
16
|
#define m_max_init numo_dfloat_new_dim0(0.0/0.0)
|
11
17
|
#define m_extract(x) rb_float_new(*(double*)x)
|
@@ -30,11 +30,14 @@ EXTERN double pow(double, double);
|
|
30
30
|
|
31
31
|
#define m_abs(x) fabs(x)
|
32
32
|
#define m_minus(x) (-(x))
|
33
|
-
#define
|
33
|
+
#define m_reciprocal(x) (1/(x))
|
34
34
|
#define m_square(x) ((x)*(x))
|
35
35
|
#define m_floor(x) floor(x)
|
36
36
|
#define m_round(x) round(x)
|
37
37
|
#define m_ceil(x) ceil(x)
|
38
|
+
#define m_trunc(x) trunc(x)
|
39
|
+
#define m_rint(x) rint(x)
|
40
|
+
#define m_sign(x) (((x)==0) ? 0.0:(((x)>0) ? 1.0:(((x)<0) ? -1.0:(x))))
|
38
41
|
|
39
42
|
#define m_eq(x,y) ((x)==(y))
|
40
43
|
#define m_ne(x,y) ((x)!=(y))
|
@@ -50,7 +53,6 @@ EXTERN double pow(double, double);
|
|
50
53
|
#define m_mulsum(x,y,z) {z += x*y;}
|
51
54
|
#define m_mulsum_init INT2FIX(0)
|
52
55
|
|
53
|
-
#define m_rand to_res53(gen_rand64())
|
54
56
|
#define m_rand_norm(a) rand_norm(a)
|
55
57
|
|
56
58
|
#define m_sprintf(s,x) sprintf(s,"%g",x)
|
@@ -275,3 +277,8 @@ static inline size_t f_max_index(size_t n, char *p, ssize_t stride)
|
|
275
277
|
}
|
276
278
|
return j;
|
277
279
|
}
|
280
|
+
|
281
|
+
static inline dtype f_seq(dtype x, dtype y, double c)
|
282
|
+
{
|
283
|
+
return x + y * c;
|
284
|
+
}
|