Back to index

nux  3.0.0
MathFunctions.cpp
Go to the documentation of this file.
00001 /*
00002  * Copyright 2010 Inalogic® Inc.
00003  *
00004  * This program is free software: you can redistribute it and/or modify it
00005  * under the terms of the GNU Lesser General Public License, as
00006  * published by the  Free Software Foundation; either version 2.1 or 3.0
00007  * of the License.
00008  *
00009  * This program is distributed in the hope that it will be useful, but
00010  * WITHOUT ANY WARRANTY; without even the implied warranties of
00011  * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
00012  * PURPOSE.  See the applicable version of the GNU Lesser General Public
00013  * License for more details.
00014  *
00015  * You should have received a copy of both the GNU Lesser General Public
00016  * License along with this program. If not, see <http://www.gnu.org/licenses/>
00017  *
00018  * Authored by: Jay Taoko <jaytaoko@inalogic.com>
00019  *
00020  */
00021 
00022 
00023 #include "../NuxCore.h"
00024 #include "MathFunctions.h"
00025 
00026 
00027 namespace nux
00028 {
00029 
00030   int Factorial (int n)
00031   {
00032     int i = 1;
00033 
00034     while (0 < n)
00035     {
00036       i *= n;
00037       n--;
00038     }
00039 
00040     return i;
00041   }
00042 
00043   double BinomialCoefficient (int n, int k)
00044   {
00045     if (n < 0)
00046       NUX_BREAK_ASM_INT3;
00047 
00048     if (k < 0 || k > n)
00049       return 0.0;
00050 
00051     double d = (double) Factorial (n) / (double) (Factorial (n - k) * Factorial (k) );
00052     return d;
00053   }
00054 
00055   double Power (double x, double y)
00056   {
00057     return std::pow (x, y);
00058   }
00059 
00060   double Log2 (double d)
00061   {
00062     return std::log (d) / std::log (2.0);
00063   }
00064 
00065   double Floor (double d)
00066   {
00067     return std::floor (d);
00068   }
00069 
00070 }