1 /**********************************************************************
4 * GEOS - Geometry Engine Open Source
5 * http://geos.refractions.net
7 * Copyright (C) 2006 Refractions Research
9 * This is free software; you can redistribute and/or modify it under
10 * the terms of the GNU Lesser General Public Licence as published
11 * by the Free Software Foundation.
12 * See the COPYING file for more information.
14 **********************************************************************/
16 #include "geos/util.h"
20 namespace util
{ // geos.util
23 * Symmetric Rounding Algorithm - equivalent to C99 round()
29 double f
= std::fabs(std::modf(val
, &n
));
32 return std::floor(val
);
34 return std::ceil(val
);
40 return std::ceil(val
);
42 return std::floor(val
);
50 * Asymmetric Rounding Algorithm - equivalent to Java Math.round()
52 double java_math_round(double val
)
55 double f
= std::fabs(std::modf(val
, &n
));
60 return std::floor(val
);
62 return std::ceil(val
);
68 return std::ceil(val
);
70 return std::floor(val
);
78 * Implementation of rint()
84 double f
=std::fabs(std::modf(val
,&n
));
87 return std::floor(val
);
89 return std::ceil(val
);
91 return(std::floor(n
/2)==n
/2)?n
:n
+1.0;
95 return std::ceil(val
);
97 return std::floor(val
);
99 return(std::floor(n
/2)==n
/2)?n
:n
-1.0;
104 } // namespace geos.util