[Gambas-user] Variable overflow questions

nando nando_f at ...951...
Fri Nov 5 20:00:37 CET 2010


Here is a visualization (view this email with a fixed width font):
Regarding your line: DIM iArea AS Single = 1.7014118E+38
A Single only has about 8 digits of precision so, the number is really this:
170,141,180,000,000,000,000,000,000,000,000,000,000.0
                                                  1.0 +
===================================================== 
170,141,180,000,000,000,000,000,000,000,000,000,000.0 =
^^^^^^^^^^
SINGLE only has room for about 8 digits of precision not all 38.
So, adding 1 means nothing.
-Fernando

---------- Original Message -----------
From: Doriano Blengino <doriano.blengino at ...1909...>
To: mailing list for gambas users <gambas-user at lists.sourceforge.net>
Sent: Wed, 03 Nov 2010 10:26:23 +0100
Subject: Re: [Gambas-user] Variable overflow questions

> user ha scritto:
> > Hi i check the overflow of variables and there is something i dont
> > understand.
> >
> > My system is
> >
> > user at ...2493...:~$ cat /etc/*release*
> > DISTRIB_ID=Ubuntu
> > DISTRIB_RELEASE=10.04
> > DISTRIB_CODENAME=lucid
> > DISTRIB_DESCRIPTION="Ubuntu 10.04.1 LTS"
> >
> > Linux ubuntu-desktop 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16
> > 19:52:42 UTC 2010 x86_64 GNU/Linux
> >
> >
> >
> > I have this small code
> > -----------------------------------
> > ' Gambas class file
> > PUBLIC SUB Form_Open()
> >
> > DIM bVar AS Boolean = TRUE
> > DIM iNum AS Byte = 255
> > DIM iA AS Short = 32767
> > DIM iRoads AS Integer = 2147483647
> > DIM iBig AS Long = 9223372036854775807
> > DIM iArea AS Single = 1.7014118E+38
> > DIM fPi AS Float = 8.98846567431105E+307
> >
> > bVar += 1
> > iNum += 1
> > iA += 1
> > iRoads += 1
> > iBig += 1
> > iArea += 1
> > fPi += 1
> >
> > PRINT bVar
> > PRINT iNum
> > PRINT iA
> > PRINT iRoads
> > PRINT iBig
> > PRINT iArea
> > PRINT fPi
> >
> > END
> > -----------------------------------
> >
> > And i get the following result
> >
> > False
> > 0
> > -32768
> > -2147483648
> > -9223372036854775808
> > 1.701411834605E+38
> > 8.988465674311E+307
> >
> >
> > My question is why the Single and Float do not overflow?
> >    
> Because they should not overflow, I think. "Real" numbers (in the IT 
> sense: "float" if you prefer ) are not discrete numbers, they have a 
> limited precision; a single bit pattern in a float corresponds to 
> infinite numbers in the real world. When you add a very small quantity 
> to a float (and "1", compared to 1E+38, is very small), you simply tell 
> it to store a different number, which has the same bit representation. 
> If a float would overflow, it would cease its main reason to exist: in 
> most situations you *do* want it to behave so. You could add a bigger 
> number to make it overflow: you should add a number big enough to fall 
> in the precision bits of the mantissa. A normal float has perhaps 6/7 
> digits of precision; to choose a comparable a number, you should choose 
> something like 1E+31 (this "1" falls in the digits of precision of 
> 1E+38). But! Even in that case, the number should not overflow, but 
> raise an error (overflow error). This last thing depends on 
> implementation of the floating point by the host computer.
> 
> Regards,
> Doriano
> 
> ------------------------------------------------------------------------------
> Achieve Improved Network Security with IP and DNS Reputation.
> Defend against bad network traffic, including botnets, malware, 
> phishing sites, and compromised hosts - saving your company time, 
> money, and embarrassment.   Learn More! 
> http://p.sf.net/sfu/hpdev2dev-nov
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user
------- End of Original Message -------





More information about the User mailing list