6 #include <grass/raster.h>
7 #include <grass/calc.h>
19 static double i_round(
double x,
double step,
double start)
31 int f_round(
int argc,
const int *argt,
void **args)
33 const DCELL *arg1 = args[1];
41 if (argc == 1 && argt[0] != CELL_TYPE)
43 if (argt[1] != DCELL_TYPE)
45 if (argc > 1 && argt[2] != DCELL_TYPE)
47 if (argc > 2 && argt[3] != DCELL_TYPE)
54 if (IS_NULL_D(&arg1[i]))
57 DCELL
x = i_round(arg1[i], 1.0, 0.0);
58 if (
x > 2147483647.0 ||
x < -2147483647.0)
67 const DCELL *arg2 = args[2];
75 if (IS_NULL_D(&arg1[i]))
77 else if (IS_NULL_D(&arg2[i]))
80 DCELL
x = i_round(arg1[i], arg2[i], 0.0);
81 if (
x > 2147483647.0 ||
x < -2147483647.0)
94 if (IS_NULL_D(&arg1[i]))
96 else if (IS_NULL_D(&arg2[i]))
99 res[i] = (FCELL) i_round(arg1[i], arg2[i], 0.0);
104 DCELL *res = args[0];
107 if (IS_NULL_D(&arg1[i]))
109 else if (IS_NULL_D(&arg2[i]))
112 res[i] = (DCELL) i_round(arg1[i], arg2[i], 0.0);
119 else if (argc == 3) {
120 const DCELL *arg2 = args[2];
121 const DCELL *arg3 = args[3];
128 for (i = 0; i <
columns; i++) {
129 if (IS_NULL_D(&arg1[i]))
131 else if (IS_NULL_D(&arg2[i]))
133 else if (IS_NULL_D(&arg3[i]))
136 DCELL
x = i_round(arg1[i], arg2[i], arg3[i]);
137 if (
x > 2147483647.0 ||
x < -2147483647.0)
147 FCELL *res = args[0];
150 if (IS_NULL_D(&arg1[i]))
152 else if (IS_NULL_D(&arg2[i]))
154 else if (IS_NULL_D(&arg3[i]))
157 res[i] = (FCELL) i_round(arg1[i], arg2[i], arg3[i]);
162 DCELL *res = args[0];
165 if (IS_NULL_D(&arg1[i]))
167 else if (IS_NULL_D(&arg2[i]))
169 else if (IS_NULL_D(&arg3[i]))
172 res[i] = (DCELL) i_round(arg1[i], arg2[i], arg3[i]);
191 if (argc > 1 && argt[0] < argt[2])
193 if (argc > 2 && argt[0] < argt[3])
196 argt[1] = DCELL_TYPE;
198 argt[2] = DCELL_TYPE;
200 argt[3] = DCELL_TYPE;