Переглянути джерело

math: fix a signed integer overflow issue in the fast factorial

computation function.
legacy
Sam Hocevar sam 12 роки тому
джерело
коміт
4678b4cb75
1 змінених файлів з 3 додано та 3 видалено
  1. +3
    -3
      src/math/real.cpp

+ 3
- 3
src/math/real.cpp Переглянути файл

@@ -763,10 +763,10 @@ template<> real pow(real const &x, real const &y)
}
}

static real fast_fact(int x)
static real fast_fact(unsigned int x)
{
real ret = real::R_1();
int i = 1, multiplier = 1, exponent = 0;
unsigned int i = 1, multiplier = 1, exponent = 0;

for (;;)
{
@@ -774,7 +774,7 @@ static real fast_fact(int x)
/* Multiplication is a no-op if multiplier == 1 */
return ldexp(ret * multiplier, exponent);

int tmp = i;
unsigned int tmp = i;
while ((tmp & 1) == 0)
{
tmp >>= 1;


Завантаження…
Відмінити
Зберегти