Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Flachy Joe
purr-data
Commits
310cf1fc
Commit
310cf1fc
authored
May 30, 2018
by
Pranay Gupta
Browse files
support for math functions on double values added
parent
92ccd578
Changes
1
Hide whitespace changes
Inline
Side-by-side
pd/src/x_arithmetic.c
View file @
310cf1fc
...
...
@@ -11,42 +11,29 @@ inputs to int and their outputs back to float. */
#include "m_pd.h"
#include <math.h>
#if !defined(HAVE_SINF)
#define sinf sin
#endif
#if !defined(HAVE_COSF)
#define cosf cos
#endif
#if !defined(HAVE_ATANF)
#define atanf atan
#endif
#if !defined(HAVE_ATAN2F)
#define atan2f atan2
#endif
#if !defined(HAVE_SQRTF)
#define sqrtf sqrt
#endif
#if !defined(HAVE_LOGF)
#define logf log
#endif
#if !defined(HAVE_EXPF)
#define expf exp
#endif
#if !defined(HAVE_FABSF)
#define fabsf fabs
#endif
#if !defined(HAVE_POWF)
#define powf pow
#if PD_FLOATSIZE == 32
#define POW powf
#define SIN sinf
#define COS cosf
#define ATAN atanf
#define ATAN2 atan2f
#define SQRT sqrtf
#define LOG logf
#define EXP expf
#define FABS fabsf
#define MAXLOG 87.3365
#elif PD_FLOATSIZE == 64
#define POW pow
#define SIN sin
#define COS cos
#define ATAN atan
#define ATAN2 atan2
#define SQRT sqrt
#define LOG log
#define EXP exp
#define FABS fabs
#define MAXLOG 87.3365
#endif
typedef
struct
_binop
{
t_object
x_obj
;
...
...
@@ -158,10 +145,10 @@ static void binop1_pow_bang(t_binop *x)
{
if
(
x
->
x_f1
>=
0
)
outlet_float
(
x
->
x_obj
.
ob_outlet
,
powf
(
x
->
x_f1
,
x
->
x_f2
));
POW
(
x
->
x_f1
,
x
->
x_f2
));
else
if
(
x
->
x_f2
<=
-
1
||
x
->
x_f2
>=
1
||
x
->
x_f2
==
0
)
outlet_float
(
x
->
x_obj
.
ob_outlet
,
powf
(
x
->
x_f1
,
x
->
x_f2
));
POW
(
x
->
x_f1
,
x
->
x_f2
));
else
{
pd_error
(
x
,
"pow: calculation resulted in a NaN"
);
...
...
@@ -174,10 +161,10 @@ static void binop1_pow_float(t_binop *x, t_float f)
x
->
x_f1
=
f
;
if
(
x
->
x_f1
>=
0
)
outlet_float
(
x
->
x_obj
.
ob_outlet
,
powf
(
x
->
x_f1
,
x
->
x_f2
));
POW
(
x
->
x_f1
,
x
->
x_f2
));
else
if
(
x
->
x_f2
<=
-
1
||
x
->
x_f2
>=
1
||
x
->
x_f2
==
0
)
outlet_float
(
x
->
x_obj
.
ob_outlet
,
powf
(
x
->
x_f1
,
x
->
x_f2
));
POW
(
x
->
x_f1
,
x
->
x_f2
));
else
{
pd_error
(
x
,
"pow: calculation resulted in a NaN"
);
outlet_float
(
x
->
x_obj
.
ob_outlet
,
0
);
...
...
@@ -564,7 +551,7 @@ static void *sin_new(void)
static
void
sin_float
(
t_object
*
x
,
t_float
f
)
{
outlet_float
(
x
->
ob_outlet
,
sinf
(
f
));
outlet_float
(
x
->
ob_outlet
,
SIN
(
f
));
}
static
t_class
*
cos_class
;
/* ----------- cos --------------- */
...
...
@@ -578,7 +565,7 @@ static void *cos_new(void)
static
void
cos_float
(
t_object
*
x
,
t_float
f
)
{
outlet_float
(
x
->
ob_outlet
,
cosf
(
f
));
outlet_float
(
x
->
ob_outlet
,
COS
(
f
));
}
static
t_class
*
tan_class
;
/* ----------- tan --------------- */
...
...
@@ -592,8 +579,8 @@ static void *tan_new(void)
static
void
tan_float
(
t_object
*
x
,
t_float
f
)
{
t_float
c
=
cosf
(
f
);
t_float
t
=
(
c
==
0
?
0
:
sinf
(
f
)
/
c
);
t_float
c
=
COS
(
f
);
t_float
t
=
(
c
==
0
?
0
:
SIN
(
f
)
/
c
);
outlet_float
(
x
->
ob_outlet
,
t
);
}
...
...
@@ -608,7 +595,7 @@ static void *atan_new(void)
static
void
atan_float
(
t_object
*
x
,
t_float
f
)
{
outlet_float
(
x
->
ob_outlet
,
atanf
(
f
));
outlet_float
(
x
->
ob_outlet
,
ATAN
(
f
));
}
static
t_class
*
atan2_class
;
/* ----------- atan2 --------------- */
...
...
@@ -630,7 +617,7 @@ static void *atan2_new(void)
static
void
atan2_float
(
t_atan2
*
x
,
t_float
f
)
{
t_float
r
=
(
f
==
0
&&
x
->
x_f
==
0
?
0
:
atan2f
(
f
,
x
->
x_f
));
t_float
r
=
(
f
==
0
&&
x
->
x_f
==
0
?
0
:
ATAN2
(
f
,
x
->
x_f
));
outlet_float
(
x
->
x_ob
.
ob_outlet
,
r
);
}
...
...
@@ -645,7 +632,7 @@ static void *sqrt_new(void)
static
void
sqrt_float
(
t_object
*
x
,
t_float
f
)
{
t_float
r
=
(
f
>
0
?
sqrtf
(
f
)
:
0
);
t_float
r
=
(
f
>
0
?
SQRT
(
f
)
:
0
);
outlet_float
(
x
->
ob_outlet
,
r
);
}
...
...
@@ -660,7 +647,7 @@ static void *log_new(void)
static
void
log_float
(
t_object
*
x
,
t_float
f
)
{
t_float
r
=
(
f
>
0
?
logf
(
f
)
:
-
1000
);
t_float
r
=
(
f
>
0
?
LOG
(
f
)
:
-
1000
);
outlet_float
(
x
->
ob_outlet
,
r
);
}
...
...
@@ -678,7 +665,7 @@ static void exp_float(t_object *x, t_float f)
{
t_float
g
;
if
(
f
>
MAXLOG
)
f
=
MAXLOG
;
g
=
expf
(
f
);
g
=
EXP
(
f
);
outlet_float
(
x
->
ob_outlet
,
g
);
}
...
...
@@ -693,7 +680,7 @@ static void *abs_new(void)
static
void
abs_float
(
t_object
*
x
,
t_float
f
)
{
outlet_float
(
x
->
ob_outlet
,
fabsf
(
f
));
outlet_float
(
x
->
ob_outlet
,
FABS
(
f
));
}
static
t_class
*
wrap_class
;
/* ----------- wrap --------------- */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment