MinGW 的大型算术失败
Large Arithmetic by MinGW fails
我的一般任务是计算 根据 Wolfram,
我希望以下内容 return 相同:
#include <iostream>
#include <vector>
#include <math.h>
unsigned long long f(const std::vector<unsigned> &coefficients)
{
unsigned short exponent = coefficients.size() - 1;
unsigned long long sum;
for (unsigned i : coefficients)
{
sum += i * pow(36, exponent);
--exponent;
}
return sum;
}
int main()
{
std::cout << f({9,13,19,6,7,8,2});
}
而是 returns 20416905041
。
根据 Alex B 在 this question 上的说法,无符号长整型的最小容量为 0 到 18446744073709551615,因此容量似乎不是问题所在。
规格:
- 编译器:x86_64-w64-mingw32 来自 Windows TDM-GCC 编译器套件
- 通过
g++ mwe.cpp -std=c++11 -omwe
编译
- OS: Windows 10 家
来自的问题:
pow
is a floating point function and therefore will be susceptible to rounding errors. You should use integer variables (do repeated multiplication by 36) instead.
我的一般任务是计算
我希望以下内容 return 相同:
#include <iostream>
#include <vector>
#include <math.h>
unsigned long long f(const std::vector<unsigned> &coefficients)
{
unsigned short exponent = coefficients.size() - 1;
unsigned long long sum;
for (unsigned i : coefficients)
{
sum += i * pow(36, exponent);
--exponent;
}
return sum;
}
int main()
{
std::cout << f({9,13,19,6,7,8,2});
}
而是 returns 20416905041
。
根据 Alex B 在 this question 上的说法,无符号长整型的最小容量为 0 到 18446744073709551615,因此容量似乎不是问题所在。
规格:
- 编译器:x86_64-w64-mingw32 来自 Windows TDM-GCC 编译器套件
- 通过
g++ mwe.cpp -std=c++11 -omwe
编译
- OS: Windows 10 家
来自
pow
is a floating point function and therefore will be susceptible to rounding errors. You should use integer variables (do repeated multiplication by 36) instead.