diff options
author | Arne Juul <arnej@yahoo-inc.com> | 2016-06-27 13:08:34 +0200 |
---|---|---|
committer | Arne Juul <arnej@yahoo-inc.com> | 2016-06-27 13:08:34 +0200 |
commit | 430637ddfce58b968ce6ad0d8d3934fbc4f6c1f8 (patch) | |
tree | ff14773eb611f327acef49e0e1ad51b0c9c4173f | |
parent | e54f27e524e18ea2bf0290699814c5fe40b1e8d4 (diff) |
use cmath
* avoid using #include <math.h>
* add std:: namespace prefix when calling <cmath> functions
-rw-r--r-- | vespalib/src/tests/approx/approx_test.cpp | 3 | ||||
-rw-r--r-- | vespalib/src/tests/eval/compiled_function/compiled_function_test.cpp | 3 | ||||
-rw-r--r-- | vespalib/src/tests/executor/stress_test.cpp | 5 | ||||
-rw-r--r-- | vespalib/src/tests/random/friendfinder.cpp | 18 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/eval/eval_spec.cpp | 42 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/eval/llvm_wrapper.cpp | 3 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/eval/operation.cpp | 41 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/approx.h | 6 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/random.cpp | 17 | ||||
-rw-r--r-- | vespalib/src/vespa/vespalib/util/random.h | 2 |
10 files changed, 72 insertions, 68 deletions
diff --git a/vespalib/src/tests/approx/approx_test.cpp b/vespalib/src/tests/approx/approx_test.cpp index 8181669db60..d9e89ffff7a 100644 --- a/vespalib/src/tests/approx/approx_test.cpp +++ b/vespalib/src/tests/approx/approx_test.cpp @@ -3,6 +3,7 @@ #include <vespa/vespalib/util/approx.h> #include <limits> #include <cfloat> +#include <cmath> #include <vespa/vespalib/util/stringfmt.h> using vespalib::approx_equal; @@ -85,7 +86,7 @@ TEST("require that numbers with slightly larger differences are not approximatel TEST("require that specific numbers with almost 2 ULP differences are approximately equal") { double base = 0.25111f; - double epsilon = nextafterf(base, 1.0) - base; + double epsilon = std::nextafterf(base, 1.0) - base; double larger = base + epsilon*1.499; double smaller = base - epsilon*0.499; EXPECT_TRUE(approx_equal(larger, smaller)); diff --git a/vespalib/src/tests/eval/compiled_function/compiled_function_test.cpp b/vespalib/src/tests/eval/compiled_function/compiled_function_test.cpp index 474f1880f2a..3b6a9c6546f 100644 --- a/vespalib/src/tests/eval/compiled_function/compiled_function_test.cpp +++ b/vespalib/src/tests/eval/compiled_function/compiled_function_test.cpp @@ -5,6 +5,7 @@ #include <vespa/vespalib/eval/eval_spec.h> #include <vespa/vespalib/eval/basic_nodes.h> #include <vespa/vespalib/util/stringfmt.h> +#include <cmath> using namespace vespalib::eval; @@ -88,7 +89,7 @@ TEST("require that large (plugin) set membership checks work") { auto fun = cf.get_function<1>(); auto arr_fun = arr_cf.get_function(); for (double value = 0.5; value <= 100.5; value += 0.5) { - if (round(value) == value) { + if (std::round(value) == value) { EXPECT_EQUAL(1.0, fun(value)); EXPECT_EQUAL(1.0, arr_fun(&value)); } else { diff --git a/vespalib/src/tests/executor/stress_test.cpp b/vespalib/src/tests/executor/stress_test.cpp index bf130dcb9dc..d9d2352f7c3 100644 --- a/vespalib/src/tests/executor/stress_test.cpp +++ b/vespalib/src/tests/executor/stress_test.cpp @@ -7,8 +7,7 @@ LOG_SETUP("executor_test"); #include <vespa/vespalib/util/executor.h> #include <vespa/vespalib/util/sync.h> #include <vespa/vespalib/util/threadstackexecutor.h> - -#include <math.h> +#include <cmath> using namespace vespalib; @@ -87,7 +86,7 @@ Test::calibrate(double wanted_ms) } double ms = (t1.MilliSecs() - t0.MilliSecs()); double size = (((double)n) / ms) * wanted_ms; - return (uint32_t) round(size); + return (uint32_t) std::round(size); } int diff --git a/vespalib/src/tests/random/friendfinder.cpp b/vespalib/src/tests/random/friendfinder.cpp index 3a8070ccf2c..30c0dd33612 100644 --- a/vespalib/src/tests/random/friendfinder.cpp +++ b/vespalib/src/tests/random/friendfinder.cpp @@ -1,27 +1,27 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/fastos/fastos.h> #include <vespa/vespalib/util/random.h> -#include <math.h> #include <stdio.h> #include <vespa/vespalib/stllike/string.h> +#include <cmath> int main(int argc, char **argv) { vespalib::RandomGen rnd(1); - double logmean = log(1000.0); - double lstddev = log(2.0); + double logmean = std::log(1000.0); + double lstddev = std::log(2.0); if (argc > 2) { - lstddev = log(strtod(argv[--argc], NULL)); - logmean = log(strtod(argv[--argc], NULL)); + lstddev = std::log(strtod(argv[--argc], NULL)); + logmean = std::log(strtod(argv[--argc], NULL)); } else if (argc > 1) { - logmean = log(strtod(argv[--argc], NULL)); + logmean = std::log(strtod(argv[--argc], NULL)); } fprintf(stderr, "100 typical friendlist sizes: "); for (int i = 0; i < 100; ++i) { - int32_t want = (uint32_t)exp(rnd.nextNormal(logmean, lstddev)); + int32_t want = (uint32_t)std::exp(rnd.nextNormal(logmean, lstddev)); fprintf(stderr, " %u", want); } fprintf(stderr, "\n"); @@ -30,8 +30,8 @@ int main(int argc, char **argv) while (!feof(stdin)) { ++person; std::vector<vespalib::string> friends; - int32_t want = (uint32_t)exp(rnd.nextNormal(logmean, lstddev)); - if (want < 17) want = (uint32_t)(exp(logmean)+0.99); + int32_t want = (uint32_t)std::exp(rnd.nextNormal(logmean, lstddev)); + if (want < 17) want = (uint32_t)(std::exp(logmean)+0.99); if (want < 1) want = 1; printf("me: %u friends:", person); diff --git a/vespalib/src/vespa/vespalib/eval/eval_spec.cpp b/vespalib/src/vespa/vespalib/eval/eval_spec.cpp index 95880f45a13..a7fb76d7505 100644 --- a/vespalib/src/vespa/vespalib/eval/eval_spec.cpp +++ b/vespalib/src/vespa/vespalib/eval/eval_spec.cpp @@ -81,7 +81,7 @@ EvalSpec::add_arithmetic_cases() { add_rule({"a", -5.0, 5.0}, {"b", -5.0, 5.0}, "(a-b)", [](double a, double b){ return (a - b); }); add_rule({"a", -5.0, 5.0}, {"b", -5.0, 5.0}, "(a*b)", [](double a, double b){ return (a * b); }); add_rule({"a", -5.0, 5.0}, {"b", -5.0, 5.0}, "(a/b)", [](double a, double b){ return (a / b); }); - add_rule({"a", -5.0, 5.0}, {"b", -5.0, 5.0}, "(a^b)", [](double a, double b){ return pow(a,b); }); + add_rule({"a", -5.0, 5.0}, {"b", -5.0, 5.0}, "(a^b)", [](double a, double b){ return std::pow(a,b); }); add_expression({"a", "b", "c", "d"}, "(((a+1)*(b-1))/((c+1)/(d-1)))") .add_case({0.0, 2.0, 0.0, 2.0}, 1.0) .add_case({1.0, 3.0, 0.0, 2.0}, 4.0) @@ -91,29 +91,29 @@ EvalSpec::add_arithmetic_cases() { void EvalSpec::add_function_call_cases() { - add_rule({"a", -1.0, 1.0}, "cos(a)", [](double a){ return cos(a); }); - add_rule({"a", -1.0, 1.0}, "sin(a)", [](double a){ return sin(a); }); - add_rule({"a", -1.0, 1.0}, "tan(a)", [](double a){ return tan(a); }); - add_rule({"a", -1.0, 1.0}, "cosh(a)", [](double a){ return cosh(a); }); - add_rule({"a", -1.0, 1.0}, "sinh(a)", [](double a){ return sinh(a); }); - add_rule({"a", -1.0, 1.0}, "tanh(a)", [](double a){ return tanh(a); }); - add_rule({"a", -1.0, 1.0}, "acos(a)", [](double a){ return acos(a); }); - add_rule({"a", -1.0, 1.0}, "asin(a)", [](double a){ return asin(a); }); - add_rule({"a", -1.0, 1.0}, "atan(a)", [](double a){ return atan(a); }); - add_rule({"a", -1.0, 1.0}, "exp(a)", [](double a){ return exp(a); }); - add_rule({"a", -1.0, 1.0}, "log10(a)", [](double a){ return log10(a); }); - add_rule({"a", -1.0, 1.0}, "log(a)", [](double a){ return log(a); }); - add_rule({"a", -1.0, 1.0}, "sqrt(a)", [](double a){ return sqrt(a); }); - add_rule({"a", -1.0, 1.0}, "ceil(a)", [](double a){ return ceil(a); }); - add_rule({"a", -1.0, 1.0}, "fabs(a)", [](double a){ return fabs(a); }); - add_rule({"a", -1.0, 1.0}, "floor(a)", [](double a){ return floor(a); }); + add_rule({"a", -1.0, 1.0}, "cos(a)", [](double a){ return std::cos(a); }); + add_rule({"a", -1.0, 1.0}, "sin(a)", [](double a){ return std::sin(a); }); + add_rule({"a", -1.0, 1.0}, "tan(a)", [](double a){ return std::tan(a); }); + add_rule({"a", -1.0, 1.0}, "cosh(a)", [](double a){ return std::cosh(a); }); + add_rule({"a", -1.0, 1.0}, "sinh(a)", [](double a){ return std::sinh(a); }); + add_rule({"a", -1.0, 1.0}, "tanh(a)", [](double a){ return std::tanh(a); }); + add_rule({"a", -1.0, 1.0}, "acos(a)", [](double a){ return std::acos(a); }); + add_rule({"a", -1.0, 1.0}, "asin(a)", [](double a){ return std::asin(a); }); + add_rule({"a", -1.0, 1.0}, "atan(a)", [](double a){ return std::atan(a); }); + add_rule({"a", -1.0, 1.0}, "exp(a)", [](double a){ return std::exp(a); }); + add_rule({"a", -1.0, 1.0}, "log10(a)", [](double a){ return std::log10(a); }); + add_rule({"a", -1.0, 1.0}, "log(a)", [](double a){ return std::log(a); }); + add_rule({"a", -1.0, 1.0}, "sqrt(a)", [](double a){ return std::sqrt(a); }); + add_rule({"a", -1.0, 1.0}, "ceil(a)", [](double a){ return std::ceil(a); }); + add_rule({"a", -1.0, 1.0}, "fabs(a)", [](double a){ return std::fabs(a); }); + add_rule({"a", -1.0, 1.0}, "floor(a)", [](double a){ return std::floor(a); }); add_expression({"a"}, "isNan(a)") .add_case({-1.0}, 0.0).add_case({-0.5}, 0.0).add_case({0.0}, 0.0).add_case({0.5}, 0.0).add_case({1.0}, 0.0) .add_case({my_nan}, 1.0).add_case({my_inf}, 0.0).add_case({-my_inf}, 0.0); - add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "atan2(a,b)", [](double a, double b){ return atan2(a, b); }); - add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "ldexp(a,b)", [](double a, double b){ return ldexp(a, b); }); - add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "pow(a,b)", [](double a, double b){ return pow(a, b); }); - add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "fmod(a,b)", [](double a, double b){ return fmod(a, b); }); + add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "atan2(a,b)", [](double a, double b){ return std::atan2(a, b); }); + add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "ldexp(a,b)", [](double a, double b){ return std::ldexp(a, b); }); + add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "pow(a,b)", [](double a, double b){ return std::pow(a, b); }); + add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "fmod(a,b)", [](double a, double b){ return std::fmod(a, b); }); add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "min(a,b)", [](double a, double b){ return std::min(a, b); }); add_rule({"a", -1.0, 1.0}, {"b", -1.0, 1.0}, "max(a,b)", [](double a, double b){ return std::max(a, b); }); } diff --git a/vespalib/src/vespa/vespalib/eval/llvm_wrapper.cpp b/vespalib/src/vespa/vespalib/eval/llvm_wrapper.cpp index d846b197d8d..e21511de4f9 100644 --- a/vespalib/src/vespa/vespalib/eval/llvm_wrapper.cpp +++ b/vespalib/src/vespa/vespalib/eval/llvm_wrapper.cpp @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/fastos/fastos.h> +#include <cmath> #include "llvm_wrapper.h" #include "node_visitor.h" #include "node_traverser.h" @@ -18,7 +19,7 @@ #include <vespa/vespalib/stllike/hash_set.h> #include <vespa/vespalib/util/approx.h> -double vespalib_eval_ldexp(double a, double b) { return ldexp(a, b); } +double vespalib_eval_ldexp(double a, double b) { return std::ldexp(a, b); } double vespalib_eval_min(double a, double b) { return std::min(a, b); } double vespalib_eval_max(double a, double b) { return std::max(a, b); } double vespalib_eval_isnan(double a) { return (std::isnan(a) ? 1.0 : 0.0); } diff --git a/vespalib/src/vespa/vespalib/eval/operation.cpp b/vespalib/src/vespa/vespalib/eval/operation.cpp index bcd4c5171d2..78bc0fd389d 100644 --- a/vespalib/src/vespa/vespalib/eval/operation.cpp +++ b/vespalib/src/vespa/vespalib/eval/operation.cpp @@ -1,6 +1,7 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/fastos/fastos.h> +#include <cmath> #include "operation.h" #include "value.h" #include "operation_visitor.h" @@ -51,7 +52,7 @@ double Add::eval(double a, double b) const { return (a + b); } double Sub::eval(double a, double b) const { return (a - b); } double Mul::eval(double a, double b) const { return (a * b); } double Div::eval(double a, double b) const { return (a / b); } -double Pow::eval(double a, double b) const { return pow(a, b); } +double Pow::eval(double a, double b) const { return std::pow(a, b); } double Equal::eval(double a, double b) const { return (a == b) ? 1.0 : 0.0; } double NotEqual::eval(double a, double b) const { return (a != b) ? 1.0 : 0.0; } double Approx::eval(double a, double b) const { return approx_equal(a, b); } @@ -61,25 +62,25 @@ double Greater::eval(double a, double b) const { return (a > b) ? 1.0 : 0.0; } double GreaterEqual::eval(double a, double b) const { return (a >= b) ? 1.0 : 0.0; } double And::eval(double a, double b) const { return ((a != 0.0) && (b != 0.0)) ? 1.0 : 0.0; } double Or::eval(double a, double b) const { return ((a != 0.0) || (b != 0.0)) ? 1.0 : 0.0; } -double Cos::eval(double a) const { return cos(a); } -double Sin::eval(double a) const { return sin(a); } -double Tan::eval(double a) const { return tan(a); } -double Cosh::eval(double a) const { return cosh(a); } -double Sinh::eval(double a) const { return sinh(a); } -double Tanh::eval(double a) const { return tanh(a); } -double Acos::eval(double a) const { return acos(a); } -double Asin::eval(double a) const { return asin(a); } -double Atan::eval(double a) const { return atan(a); } -double Exp::eval(double a) const { return exp(a); } -double Log10::eval(double a) const { return log10(a); } -double Log::eval(double a) const { return log(a); } -double Sqrt::eval(double a) const { return sqrt(a); } -double Ceil::eval(double a) const { return ceil(a); } -double Fabs::eval(double a) const { return fabs(a); } -double Floor::eval(double a) const { return floor(a); } -double Atan2::eval(double a, double b) const { return atan2(a, b); } -double Ldexp::eval(double a, double b) const { return ldexp(a, b); } -double Fmod::eval(double a, double b) const { return fmod(a, b); } +double Cos::eval(double a) const { return std::cos(a); } +double Sin::eval(double a) const { return std::sin(a); } +double Tan::eval(double a) const { return std::tan(a); } +double Cosh::eval(double a) const { return std::cosh(a); } +double Sinh::eval(double a) const { return std::sinh(a); } +double Tanh::eval(double a) const { return std::tanh(a); } +double Acos::eval(double a) const { return std::acos(a); } +double Asin::eval(double a) const { return std::asin(a); } +double Atan::eval(double a) const { return std::atan(a); } +double Exp::eval(double a) const { return std::exp(a); } +double Log10::eval(double a) const { return std::log10(a); } +double Log::eval(double a) const { return std::log(a); } +double Sqrt::eval(double a) const { return std::sqrt(a); } +double Ceil::eval(double a) const { return std::ceil(a); } +double Fabs::eval(double a) const { return std::fabs(a); } +double Floor::eval(double a) const { return std::floor(a); } +double Atan2::eval(double a, double b) const { return std::atan2(a, b); } +double Ldexp::eval(double a, double b) const { return std::ldexp(a, b); } +double Fmod::eval(double a, double b) const { return std::fmod(a, b); } double Min::eval(double a, double b) const { return std::min(a, b); } double Max::eval(double a, double b) const { return std::max(a, b); } double IsNan::eval(double a) const { return std::isnan(a) ? 1.0 : 0.0; } diff --git a/vespalib/src/vespa/vespalib/util/approx.h b/vespalib/src/vespa/vespalib/util/approx.h index 37fb4012d4c..ee61d71d0a6 100644 --- a/vespalib/src/vespa/vespalib/util/approx.h +++ b/vespalib/src/vespa/vespalib/util/approx.h @@ -2,7 +2,7 @@ #pragma once -#include <math.h> +#include <cmath> namespace vespalib { @@ -19,13 +19,13 @@ inline bool approx_equal(double a, double b) // This is in a way the simple case, but it's needed // anyway to handle numbers that are outside "float" range. double frac = b / a; - float rounded = nextafterf(frac, 1.0); + float rounded = std::nextafterf(frac, 1.0); return (rounded == 1.0); } // in reality this may allow up to 2 bits difference // since we round to float and also call nextafterf float aa = (float) a; - return (aa == nextafterf((float) b, aa)); + return (aa == std::nextafterf((float) b, aa)); } } // namespace vespalib diff --git a/vespalib/src/vespa/vespalib/util/random.cpp b/vespalib/src/vespa/vespalib/util/random.cpp index 64f55c98371..051b1ca3ba5 100644 --- a/vespalib/src/vespa/vespalib/util/random.cpp +++ b/vespalib/src/vespa/vespalib/util/random.cpp @@ -2,6 +2,7 @@ #include <vespa/fastos/fastos.h> #include "random.h" +#include <cmath> namespace vespalib { @@ -53,8 +54,8 @@ RandomGen::DRanNormalTail(double dMin, int iNegative) { double x, y; do { - x = log(nextDouble()) / dMin; - y = log(nextDouble()); + x = std::log(nextDouble()) / dMin; + y = std::log(nextDouble()); } while (-2 * y < x * x); return iNegative ? x - dMin : dMin - x; @@ -63,12 +64,12 @@ RandomGen::DRanNormalTail(double dMin, int iNegative) void RandomGen::zigNorInit(int iC, double dR, double dV) { - double f(exp(-0.5 * dR * dR)); + double f(std::exp(-0.5 * dR * dR)); s_adZigX[0] = dV / f; /* [0] is bottom block: V / f(R) */ s_adZigX[1] = dR; for (int i = 2; i < iC; ++i) { - s_adZigX[i] = sqrt(-2 * log(dV / s_adZigX[i - 1] + f)); - f = exp(-0.5 * s_adZigX[i] * s_adZigX[i]); + s_adZigX[i] = std::sqrt(-2 * std::log(dV / s_adZigX[i - 1] + f)); + f = std::exp(-0.5 * s_adZigX[i] * s_adZigX[i]); } s_adZigX[iC] = 0.0; for (int i = 0; i < iC; ++i) { @@ -83,15 +84,15 @@ RandomGen::DRanNormalZig() double u = 2 * nextDouble() - 1; unsigned int i = nextInt32() & 0x7F; /* first try the rectangular boxes */ - if (fabs(u) < s_adZigR[i]) + if (std::fabs(u) < s_adZigR[i]) return u * s_adZigX[i]; /* bottom box: sample from the tail */ if (i == 0) return DRanNormalTail(ZIGNOR_R, u < 0); /* is this a sample from the wedges? */ double x = u * s_adZigX[i]; - double f0 = exp(-0.5 * (s_adZigX[i] * s_adZigX[i] - x * x) ); - double f1 = exp(-0.5 * (s_adZigX[i+1] * s_adZigX[i+1] - x * x) ); + double f0 = std::exp(-0.5 * (s_adZigX[i] * s_adZigX[i] - x * x) ); + double f1 = std::exp(-0.5 * (s_adZigX[i+1] * s_adZigX[i+1] - x * x) ); if (f1 + nextDouble() * (f0 - f1) < 1.0) { return x; diff --git a/vespalib/src/vespa/vespalib/util/random.h b/vespalib/src/vespa/vespalib/util/random.h index 411d0033c7c..e3479d2efe7 100644 --- a/vespalib/src/vespa/vespalib/util/random.h +++ b/vespalib/src/vespa/vespalib/util/random.h @@ -9,7 +9,7 @@ #include <sys/types.h> #include <unistd.h> #include <time.h> -#include <math.h> +#include <cmath> namespace vespalib { |