C++ 定义了 long long 但输出有限
C++ defined long long but the output is limited
我目前正在学习C++,所以我是初学者。我想我会制作一个小程序来生成贝塞尔多项式项。这是程序:
#include <iostream>
// x!
long long fact(const long long &x)
{
long long z {1};
for (long long i=1; i<=x; ++i)
z *= i;
return z;
}
// 2^n
long long pwr2(const int &n)
{
long long z {1};
for (long long i=0; i<n; ++i)
z *= 2;
return (n == 0 ? 1 : z);
}
// Bessel coefficients
long long bessel(long long *a, const long long &N)
{
for (long long i=0; i<=N; ++i)
a[i] = fact(N + i) / (pwr2(i) * fact(N - i) * fact(i));
return *a;
}
int main()
{
std::cout << "N = ";
long long N;
std::cin >> N;
long long *a {new long long[N + 1]};
*a = bessel(a, N);
for (long long i=0; i<=N; ++i)
std::cout << a[i] << ( i<N ? " " : "\n");
delete a;
a = nullptr;
return 0;
}
N=10 好像是极限了。 sizeof(long long)
显示 8 (archlinux x64)。 fact(20) > (2^64)-1,所以我卡住了,即使是 long long。有没有办法绕过这个限制?
代码如你所见,是我走投无路把所有int修改为long long之后的。我什至在所有数字中添加了"ll",没有任何效果。我什至从分母中删除了主要括号并排列了这些项,以便它们逐渐分开以某种方式平衡它们自己,例如:
fact(N+i)/fact(N-i)/fact(i)/pwr2(i)
,也没有效果。
您不能对本机类型做您想做的事,因为它们受位大小的限制。
但是你可以使用一些库来完成这些(This is one such example) 如果你真的需要它(但是根据你的问题,你只是在学习 c++ 所以我想你不需要那些)
我目前正在学习C++,所以我是初学者。我想我会制作一个小程序来生成贝塞尔多项式项。这是程序:
#include <iostream>
// x!
long long fact(const long long &x)
{
long long z {1};
for (long long i=1; i<=x; ++i)
z *= i;
return z;
}
// 2^n
long long pwr2(const int &n)
{
long long z {1};
for (long long i=0; i<n; ++i)
z *= 2;
return (n == 0 ? 1 : z);
}
// Bessel coefficients
long long bessel(long long *a, const long long &N)
{
for (long long i=0; i<=N; ++i)
a[i] = fact(N + i) / (pwr2(i) * fact(N - i) * fact(i));
return *a;
}
int main()
{
std::cout << "N = ";
long long N;
std::cin >> N;
long long *a {new long long[N + 1]};
*a = bessel(a, N);
for (long long i=0; i<=N; ++i)
std::cout << a[i] << ( i<N ? " " : "\n");
delete a;
a = nullptr;
return 0;
}
N=10 好像是极限了。 sizeof(long long)
显示 8 (archlinux x64)。 fact(20) > (2^64)-1,所以我卡住了,即使是 long long。有没有办法绕过这个限制?
代码如你所见,是我走投无路把所有int修改为long long之后的。我什至在所有数字中添加了"ll",没有任何效果。我什至从分母中删除了主要括号并排列了这些项,以便它们逐渐分开以某种方式平衡它们自己,例如:
fact(N+i)/fact(N-i)/fact(i)/pwr2(i)
,也没有效果。
您不能对本机类型做您想做的事,因为它们受位大小的限制。 但是你可以使用一些库来完成这些(This is one such example) 如果你真的需要它(但是根据你的问题,你只是在学习 c++ 所以我想你不需要那些)