Computer Science Canada Programming C, C++, Java, PHP, Ruby, Turing, VB   Username:   Password: Wiki   Blog   Search   Turing   Chat Room  Members
"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.

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.

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?

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.
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First

Page 1 of 1  [ 14 Posts ]
 Jump to:  Select a forum  CompSci.ca ------------ - Network News - General Discussion     General Forums   -----------------   - Hello World   - Featured Poll   - Contests     Contest Forums   -----------------   - DWITE   - [FP] Contest 2006/2008   - [FP] 2005/2006 Archive   - [FP] 2004/2005 Archive   - Off Topic     Lounges   ---------   - User Lounge   - VIP Lounge     Programming -------------- - General Programming     General Programming Forums   --------------------------------   - Functional Programming   - Logical Programming   - C     C   --   - C Help   - C Tutorials   - C Submissions   - C++     C++   ----   - C++ Help   - C++ Tutorials   - C++ Submissions   - Java     Java   -----   - Java Help   - Java Tutorials   - Java Submissions   - Ruby     Ruby   -----   - Ruby Help   - Ruby Tutorials   - Ruby Submissions   - Turing     Turing   --------   - Turing Help   - Turing Tutorials   - Turing Submissions   - PHP     PHP   ----   - PHP Help   - PHP Tutorials   - PHP Submissions   - Python     Python   --------   - Python Help   - Python Tutorials   - Python Submissions   - Visual Basic and Other Basics     VB   ---   - Visual Basic Help   - Visual Basic Tutorials   - Visual Basic Submissions     Education ----------- - Student Life   Graphics and Design ----------------------- - Web Design     Web Design Forums   ---------------------   - (X)HTML Help   - (X)HTML Tutorials   - Flash MX Help   - Flash MX Tutorials   - Graphics     Graphics Forums   ------------------   - Photoshop Tutorials   - The Showroom   - 2D Graphics   - 3D Graphics     Teams ------ - dTeam Public

 Style: Appalachia blueSilver eMJay subAppalachia subBlue subCanvas subEmjay subGrey subSilver subVereor Search: