mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-05 22:04:57 +00:00
(svn r15777) -Add: helper functions to get the least common multiple and the greatest common divisor (Alberth)
This commit is contained in:
parent
da37ab321d
commit
3ef8a09e20
@ -1671,6 +1671,10 @@
|
||||
RelativePath=".\..\src\core\geometry_type.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\core\math_func.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\core\math_func.hpp"
|
||||
>
|
||||
|
@ -1668,6 +1668,10 @@
|
||||
RelativePath=".\..\src\core\geometry_type.hpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\core\math_func.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\..\src\core\math_func.hpp"
|
||||
>
|
||||
|
@ -363,6 +363,7 @@ core/endian_func.hpp
|
||||
core/endian_type.hpp
|
||||
core/enum_type.hpp
|
||||
core/geometry_type.hpp
|
||||
core/math_func.cpp
|
||||
core/math_func.hpp
|
||||
core/mem_func.hpp
|
||||
core/overflowsafe_type.hpp
|
||||
|
41
src/core/math_func.cpp
Normal file
41
src/core/math_func.cpp
Normal file
@ -0,0 +1,41 @@
|
||||
/* $Id$ */
|
||||
|
||||
/** @file math_func.cpp Math functions. */
|
||||
|
||||
#include "../stdafx.h"
|
||||
#include "math_func.hpp"
|
||||
|
||||
/**
|
||||
* Compute least common multiple (lcm) of arguments \a a and \a b, the smallest
|
||||
* integer value that is a multiple of both \a a and \a b.
|
||||
* @param a First number.
|
||||
* @param b second number.
|
||||
* @return Least common multiple of values \a a and \a b.
|
||||
*
|
||||
* @note This function only works for non-negative values of \a a and \a b.
|
||||
*/
|
||||
int LeastCommonMultiple(int a, int b)
|
||||
{
|
||||
if (a == 0 || b == 0) return 0; // By definition.
|
||||
if (a == 1 || a == b) return b;
|
||||
if (b == 1) return a;
|
||||
|
||||
return a * b / GreatestCommonDivisor(a, b);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute greatest common divisor (gcd) of \a a and \a b.
|
||||
* @param a First number.
|
||||
* @param b second number.
|
||||
* @return Greatest common divisor of \a a and \a b.
|
||||
*/
|
||||
int GreatestCommonDivisor(int a, int b)
|
||||
{
|
||||
while (b != 0) {
|
||||
int t = b;
|
||||
b = a % b;
|
||||
a = t;
|
||||
}
|
||||
return a;
|
||||
|
||||
}
|
@ -264,4 +264,7 @@ static FORCEINLINE void Swap(T &a, T &b)
|
||||
b = t;
|
||||
}
|
||||
|
||||
int LeastCommonMultiple(int a, int b);
|
||||
int GreatestCommonDivisor(int a, int b);
|
||||
|
||||
#endif /* MATH_FUNC_HPP */
|
||||
|
Loading…
Reference in New Issue
Block a user