c - Long Long int 修剪数字小于假定的 64 位容量?

标签 c

我对生成斐波那契数的程序有疑问。用户输入他/她需要的斐波那契数列的数量,程序生成它。问题是在 48 个数字之后,程序开始给出错误的数字。它似乎对数字进行了修剪,给出了一些随机结果。我创建了一个“unsigned long 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;
}

她的输出快照,通知号 49

enter image description here

最佳答案

这绝对是底层库不支持 64 位 unsigned long long 的问题。您的代码在我的 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。 The GNU Multiple Precision Arithmetic Library可能会满足您长时间运行的需要,并且还可以自动纠正库中精度的不足。

关于c - Long Long int 修剪数字小于假定的 64 位容量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33401156/

相关文章:

c - 如何将 char* 中的内容逐个符号复制到 char** 中?

c - 将结构传递给函数并在 C 中修改它

c - 从 C 中的 char* 数组中删除空格

c - 尝试打印二维数组中的值

c - 读取函数: copying buffer to another char array

c - 格式参数过多(printf 函数)

C 字符串数组操作

c - 在结构体中写入数组

c - 8 位值有文字后缀吗?

c - 如何记录使用 VS 2010 执行的代码部分的行号