Fix error left behind from testing.
[geos.git] / source / util / math.cpp
blob945c5b9651308675d5e79b5992ade12c31dd74c8
1 /**********************************************************************
2 * $Id$
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"
17 #include <cmath>
19 namespace geos {
20 namespace util { // geos.util
23 * Symmetric Rounding Algorithm - equivalent to C99 round()
25 double
26 sym_round(double val)
28 double n;
29 double f = std::fabs(std::modf(val, &n));
30 if (val >= 0) {
31 if (f < 0.5) {
32 return std::floor(val);
33 } else if (f > 0.5) {
34 return std::ceil(val);
35 } else {
36 return (n + 1.0);
38 } else {
39 if (f < 0.5) {
40 return std::ceil(val);
41 } else if (f > 0.5) {
42 return std::floor(val);
43 } else {
44 return (n - 1.0);
50 * Asymmetric Rounding Algorithm - equivalent to Java Math.round()
52 double java_math_round(double val)
54 double n;
55 double f = std::fabs(std::modf(val, &n));
57 if (val >= 0)
59 if (f < 0.5) {
60 return std::floor(val);
61 } else if (f > 0.5) {
62 return std::ceil(val);
63 } else {
64 return (n + 1.0);
66 } else {
67 if (f < 0.5) {
68 return std::ceil(val);
69 } else if (f > 0.5) {
70 return std::floor(val);
71 } else {
72 return n;
75 } // java_math_round
78 * Implementation of rint()
80 double
81 rint_vc(double val)
83 double n;
84 double f=std::fabs(std::modf(val,&n));
85 if (val>=0) {
86 if (f<0.5) {
87 return std::floor(val);
88 } else if (f>0.5) {
89 return std::ceil(val);
90 } else {
91 return(std::floor(n/2)==n/2)?n:n+1.0;
93 } else {
94 if (f<0.5) {
95 return std::ceil(val);
96 } else if (f>0.5) {
97 return std::floor(val);
98 } else {
99 return(std::floor(n/2)==n/2)?n:n-1.0;
104 } // namespace geos.util
105 } // namespace geos