Changeset - r11414:66dd9ef9c484
[Not reviewed]
master
0 4 1
rubidium - 15 years ago 2009-03-21 01:34:31
rubidium@openttd.org
(svn r15777) -Add: helper functions to get the least common multiple and the greatest common divisor (Alberth)
5 files changed with 53 insertions and 0 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -1672,6 +1672,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\math_func.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\math_func.hpp"
 
				>
 
			</File>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -1669,6 +1669,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\math_func.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\core\math_func.hpp"
 
				>
 
			</File>
source.list
Show inline comments
 
@@ -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
src/core/math_func.cpp
Show inline comments
 
new file 100644
 
/* $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;
 

	
 
}
src/core/math_func.hpp
Show inline comments
 
@@ -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 */
0 comments (0 inline, 0 general)