GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
Loading...
Searching...
No Matches
xexp.c
Go to the documentation of this file.
1#include <math.h>
2
3#include <grass/gis.h>
4#include <grass/raster.h>
5#include <grass/calc.h>
6
7/**********************************************************************
8exp(x) computes e raised to power x
9exp(x,y) computes x raised to power y
10
11 if floating point exception occurs during the evaluation of exp(x)
12 or exp(x,y) the result is NULL
13**********************************************************************/
14
15int f_exp(int argc, const int *argt, void **args)
16{
17 DCELL *res = args[0];
18 DCELL *arg1 = args[1];
19 DCELL *arg2;
20 int i;
21
22 if (argc < 1)
23 return E_ARG_LO;
24 if (argc > 2)
25 return E_ARG_HI;
26
27 if (argt[0] != DCELL_TYPE)
28 return E_RES_TYPE;
29
30 if (argt[1] != DCELL_TYPE)
31 return E_ARG_TYPE;
32
33 arg2 = (argc > 1) ? args[2] : NULL;
34
35 for (i = 0; i < columns; i++)
36 if (IS_NULL_D(&arg1[i]))
37 SET_NULL_D(&res[i]);
38 else if (argc > 1 && IS_NULL_D(&arg2[i]))
39 SET_NULL_D(&res[i]);
40 else if (argc > 1 && arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
41 SET_NULL_D(&res[i]);
42 else {
44 res[i] = (argc > 1) ? pow(arg1[i], arg2[i]) : exp(arg1[i]);
46 SET_NULL_D(&res[i]);
47 }
48
49 return 0;
50}
volatile int floating_point_exception
Definition calc.c:8
int columns
Definition calc.c:11
#define NULL
Definition ccmath.h:32
int f_exp(int argc, const int *argt, void **args)
Definition xexp.c:15