瀏覽代碼

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

computation function.
legacy
Sam Hocevar sam 13 年之前
父節點
當前提交
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;


Loading…
取消
儲存