Back to Mysql Server

Readme

libs/mysql/math/readme.md

latest2.8 KB
Original Source

\page PageLibsMysqlMath Library: Math

<!--- Copyright (c) 2024, 2025, Oracle and/or its affiliates. // This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. // This program is designed to work with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have either included with the program or referenced in the documentation. // This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. // You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA --> <!-- MySQL Math Library ================== -->

Code documentation: @ref GroupLibsMysqlMath.

This is a header-only library, containing mathematical functions. Currently it has the following headers:

  • bounded_arithmetic.h: multiplication and addition, capped at a max value.

  • int_pow.h: Functions to compute powers and logarithms for integers efficiently:

    • int_pow(a, b) computes a to the power b. For constexpr arguments, reduces to a compile-time constant. Otherwise, logarithmic in the exponent. The exact number of multiplications is equal to the 2-logarithm of the exponent, plus the number of 1-bits in the exponent.

    • int_log<N>(a) computes the base-N logarithm of a. For constexpr arguments, reduces to a constant. Otherwise, logarithmic in the base logarithm of std::numeric_limits<Value_t>::max(). The exact number of divisions is the floor of log2(int_log_max<Value_t, base>()) and in each division, the denominator is a compile-time constant which is a power of base, so that the compiler may use denominator-specific optimizations such as shift-right instead of division operations.

    • int_log_max<T>() reduces to a compile-time constant, which is the floor of the logarithm of the maximum value representable in type T.

  • summation.h: Two algorithms to compute the sums of sequences: kahan_sum uses the Kahan summation algorithm to compute the sum of floating-point numbers with very low numeric error. sequence_sum_difference computes the difference of the sums of two sequences of nonnegative integers, guaranteeing exact results when the sums are close to each other, even if each sum is huge.