"Overflow in Integer expression" how do i fix this?
Author 
Message 
riveryu

Posted: Sat Feb 16, 2008 4:24 pm Post subject: "Overflow in Integer expression" how do i fix this? 


I wrote an answer program to a question that says  user inputs numbers from 1  30 , program outputs the factorials( defined 1x2x4x5 .. the number) .
I found that when the user enters anything bigger than 12! = 479 001 600 will result in "Overflow in Integer expression" (cuz Turing suckz...). How do i fix this problem?
( I dont need an answer to the question, i need a solution to the integer overflow problem)
Maybe my teacher asked too much, since im only supposed to have learned about loops, for, var :int, real, nat, string, cls, put get... etc. No arrays, fcns o proc etc...
Anyways, juz letting u know; assuming if this have anything to do with solving the problem.






Sponsor Sponsor



Clayton

Posted: Sat Feb 16, 2008 4:28 pm Post subject: RE:"Overflow in Integer expression" how do i fix this? 


The problem is that 13! is greater than 2^31  1, which is the upper limit to integers in Turing. If you want anything bigger, you're going to have to start thinking outside the box I'm afraid.






BigBear

Posted: Sat Feb 16, 2008 4:29 pm Post subject: Re: "Overflow in Integer expression" how do i fix this? 


Well if you post your code we might be able to tell why it is happening.
I don't remember even having that error.






Saad

Posted: Sat Feb 16, 2008 4:30 pm Post subject: RE:"Overflow in Integer expression" how do i fix this? 


You can use real's for 30! since reals have a bigger range, however you will loose precision in the number






BigBear

Posted: Sat Feb 16, 2008 4:43 pm Post subject: Re: "Overflow in Integer expression" how do i fix this? 


What is the difference ?
Reals and every number and Integers and only whole numbers and since he is working with whole number integers should work.






Clayton

Posted: Sat Feb 16, 2008 4:59 pm Post subject: RE:"Overflow in Integer expression" how do i fix this? 


Try the following two programs:
Turing:  fcn fact (num : int) : real
if num <= 1 then
result 1
else
result num * fact (num  1)
end if
end fact
put fact (13)

That one was with reals.
Turing:  fcn fact (num : int) : int
if num <= 1 then
result 1
else
result num * fact (num  1)
end if
end fact
put fact (13) 
That one was with ints. Notice the only difference causes one to fail, and the other to still run?






Saad

Posted: Sat Feb 16, 2008 5:11 pm Post subject: RE:"Overflow in Integer expression" how do i fix this? 


Unlike in like life, a computer cannot store an infinite number of digits, this is dependant on the number of bytes you have and how its stored.
An integer is stored in a regular binary format. The defined size of an integer is 4 bytes giving us the range of 2 ^ 31 and 2^31  1.
However a real number is stored in a different way. I'm not sure how they're represent in turing, but in general its stored in scientific notation. Which allows for a greater range






OneOffDriveByPoster

Posted: Sat Feb 16, 2008 5:52 pm Post subject: Re: "Overflow in Integer expression" how do i fix this? 


Teachers in certain subjects do tend to make assignments that are more involved than they expected. You could try doing multiplication using strings.






riveryu

Posted: Sat Feb 16, 2008 6:05 pm Post subject: Re: "Overflow in Integer expression" how do i fix this? 


I am aware that you can solve this question with recursive function, which u can use real numbers.
However, heres the cache to this problem, i can only use forloops, therefore only integers.
i will post my code here to show u :
Turing:  %user inputs number, outputs factorial, user can choose when to quit
% user can only go up to 12!, since the numbers are too large after 12!.
% 30! is 2.6525286x10**32, which is quite large
var num : int %input number
var fac : int := 1 %factorial
var ans : string
loop
put "Enter a number for its factorial."
get num
exit when num > 30
for i : 1 .. num
cls
fac := i * fac
% everytime it loops, i is multiplied with the previous result
% since i timing 1 is equal to i at first
% this is equivalent to i timing it self
% everytime the it loops, 1*2*3*4.. number
put num, "! = ", fac
delay ( 200) % this is here to show u the problem in slow motion, error comes after 9 digits
end for
fac := 1 %changes fac back to 1 to clear the amount acuminated earlier
put "Do you wish to find out more factorials? Y/N"
get ans
exit when ans = "N" or ans = "n"
end loop 
*cough* Im "beginner" cuz i juz started grade 10 programming for 2 weeks, im not suppose to know about fcns and procs *cough*






zylum

Posted: Sat Feb 16, 2008 6:13 pm Post subject: RE:"Overflow in Integer expression" how do i fix this? 


why can you only use integers in for loops?? try changing your fac variable to a real.. It wont give you an exact answer but at least it wont crash.






riveryu

Posted: Sat Feb 16, 2008 6:46 pm Post subject: Re: "Overflow in Integer expression" how do i fix this? 


O, oops...
Thx zylumm, Clayton and Saad, and ppl.
I misunderstood something in message the Turing debugger gave me while i was adjusting the program which messed me up... and got the impression that u can't use int for the forloop.
Sry
Im not sure if this is the place to say this but...
Pehaps this problem should be addressed in one of the tutorials, as in the difference of real and int in respect to scientific notation
The Turing Walkthrough only mentioned this:
Real Numbers:
Real numbers can contain decimal places. Turing supports up to 16 decimal places for real numbers. Real numbers contain the realms of the positive, the negative, and zero.
Integers:
We should all know what an integer is, given some fundamental math. Just to make sure, an integer is a whole number; it has no decimals; it is a fraction whose denominator is 1; it can be negative, zero, or positive.
Maybe this is too obvious for some ppl but i dont think it is for beginners who nvr touched a programming language before, espicially for ppl who learn Turing since Ontario (CA) use Turing for all grade 10  the first standard CS(not Counter Strike) course a student encounters.






LaZ3R

Posted: Sun Feb 17, 2008 11:54 am Post subject: RE:"Overflow in Integer expression" how do i fix this? 


Real can hold values up to 306 exponents at most, using it for extremely large numbers is your best bet. Though you won't be able to display every digit (without thinking outside the box), you at least won't get an overflow.






riveryu

Posted: Sun Feb 17, 2008 1:41 pm Post subject: Re: "Overflow in Integer expression" how do i fix this? 


Im not very familiar with the meanig of "outside the box", I think thats sort too broad for some ppl... I played around with Clayton's functions  is this one the things outside that box, ? (look at last line in the code)
Turing:  fcn fact (num : real) : real
if num <= 1 then
result 1
else
result num * fact (num  1)
end if
end fact
put fact (30) : 0 : 0 % making turing display decimals, simultaneously displaying all numbers preceding the decimals
% the first : 0 means your not trying to assign space
% the second is assigning decimal places for Turing to display, usually used for rounding though.

Is there any other things outside the box, plz tell or r u not allowed?(im new here to the forum)






Mackie

Posted: Sun Feb 17, 2008 2:16 pm Post subject: RE:"Overflow in Integer expression" how do i fix this? 


Outside the box is a saying. It just means to think unconventionally.







