I was trying to make a program that prompts a user for a int value which uses is as the nth of the Fibonacci sequence.
This has goes all well for me until if you input 48. The Fibonacci output shows the last term a negative number, am I doing something wrong?
Open to criticism, I accept some pointers to study on more.
int i,Nth,Num1=0,Num2=1,Num3;
Num3=Num1 Num2;
printf("Enter Fibonacci Sequence terms limit: ");
scanf("%d",&Nth);
printf("Fibonacci Sequence: %d, %d",Num1,Num2);
for(i=3;i<=Nth; i){
printf(", %d",Num3);
Num1=Num2;
Num2=Num3;
Num3=Num1 Num2;
};
This is the output when entering 48:
Fibonacci Sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,
1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811,
514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817,
39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170,
1836311903, -1323752223
CodePudding user response:
You've reached integer's maxmimum:
1836311903 1134903170 = 2,971,215,073
32 bit Integer Maximum = 2,147,483,647
You should try different data types to get more values.
More about data types in C: https://en.wikipedia.org/wiki/C_data_types
CodePudding user response:
The Fibonacci output shows the last term a negative number, am I doing something wrong?
Yes, you are. You have a signed integer overflow in your code. This is undefined behaviour, which means that anything can happen (including a "seemingly" working code).
this goes all well for me until if you input 48.
You can check the maximum value of an integer on your platform using INT_MAX
:
#include <stdio.h>
#include <limits.h> // You have to include this header
int main(void)
{
printf("INT_MAX = %d\n", INT_MAX);
}
Output:
INT_MAX = 2147483647
Which is greater than fib(47) = 2971215073
.
One solution is to use long
instead of int
. This will solve your problem, unless you want very huge numbers. In this case, you would want to use a dedicated library.
CodePudding user response:
here you are store result in NUM3 and you result is not show in proper value because the value for 48 term is higher than limit of storing number in int data type. For this problem has solution to use long int data type for store big values. Here long keyword use before int for storing big precision values. The INTEGER data type stores whole numbers that range from -2,147,483,647 to 2,147,483,647 for 9 or 10 digits of precision.
CodePudding user response:
int can express up to 1836311903.
if you want to show 48th,
you should consider using long