(svn r15777) -Add: helper functions to get the least common multiple and the greatest common divisor (Alberth)

This commit is contained in:
rubidium 2009-03-21 01:34:31 +00:00
parent da37ab321d
commit 3ef8a09e20
5 changed files with 53 additions and 0 deletions

View File

@ -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"
>

View File

@ -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"
>

View File

@ -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
View 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;
}

View File

@ -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 */