Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Long int将数字修剪为小于其假定的64位容量?_C - Fatal编程技术网

C Long int将数字修剪为小于其假定的64位容量?

C Long int将数字修剪为小于其假定的64位容量?,c,C,我有一个关于生成斐波那契数的程序的问题。用户输入他/她需要的斐波那契数,然后程序生成它。问题是在48个数字之后,程序开始给出错误的数字。它似乎对给出一些随机结果的数字进行了微调。我制作了一个“unsigned long int”数组,每个数字64位。它应该有很多数字,但它没有 这是我的密码: ‪#‎include‬ <stdio.h> int main (void) { int n , i ; printf("Enter number of Fibonacci numbers y

我有一个关于生成斐波那契数的程序的问题。用户输入他/她需要的斐波那契数,然后程序生成它。问题是在48个数字之后,程序开始给出错误的数字。它似乎对给出一些随机结果的数字进行了微调。我制作了一个“unsigned long int”数组,每个数字64位。它应该有很多数字,但它没有

这是我的密码:

‪#‎include‬ <stdio.h>
int main (void)
{
 int n , i ;
 printf("Enter number of Fibonacci numbers you need : ");
 scanf("%d" , &n);

 unsigned long long int fib_numbers[n];

 fib_numbers[0] = 0 ;
 printf("1. %llu\n",0);
 fib_numbers[1] = 1 ;
 printf("2. %llu\n",1);

 for(i=2;i<n;i++)
   {
    fib_numbers[i]=fib_numbers[i-1]+fib_numbers[i-2];
    printf("%d. %llu\n",i+1,fib_numbers[i]);
   }
 return 0;
}
‪#‎包括‬ 
内部主(空)
{
int n,i;
printf(“输入所需的斐波那契数:”);
scanf(“%d”和“&n”);
无符号长整型fib_数[n];
fib_数[0]=0;
printf(“1.%llu\n”,0);
fib_数[1]=1;
printf(“2.%llu\n”,1);

对于(i=2;i您可以通过以下方式确定
无符号long-long-int
类型的对象的最大值

#include <limits>

//...

std::cout << std::numeric_limits<unsigned long long int>::max() << std::endl;

这肯定是底层库不支持64位无符号长库的问题。您的代码在我的64位Linux系统上运行得非常好

48. 2971215073
49. 4807526976
50. 7778742049
51. 12586269025
52. 20365011074
53. 32951280099
54. 53316291173
55. 86267571272
56. 139583862445
57. 225851433717
58. 365435296162
59. 591286729879
60. 956722026041

至于解决方案,这取决于您的平台、编译器等。没有足够的信息来指导。但是,您可能希望研究一个支持更大数字的系统,因为64位只能覆盖到fib 94。可能需要更长的运行时间,并且可能会自动纠正库中的精度不足。

看起来像32b它溢出…无法复制您没有使用16位Turbo-C++或任何东西,是吗?请尝试
printf(“%d\n”,(int)sizeof(unsigned long int))
并查看您是否得到4或8或?不要发布图像而不是文本!是否
无符号long long int
保证至少保存2^64-1?没有32位问题的原因。@deviantfan只保证long long更宽或等于long.:)但是,你可以使用在C或C++中标头中声明的特定类型,如Unthul64。DeXANTANFE是正确的,在<代码>长Lo/代码>保证至少64位。如果你真的不确定,你可以谷歌。@ VladfromMoscow但<代码> UTIN 64。是可选的。如果它们不支持
long
数据类型,它为什么要编译?如果没有将编译器设置为strict,这可能只是一个警告。
48. 2971215073
49. 4807526976
50. 7778742049
51. 12586269025
52. 20365011074
53. 32951280099
54. 53316291173
55. 86267571272
56. 139583862445
57. 225851433717
58. 365435296162
59. 591286729879
60. 956722026041