[Gambas-user] gb3: "Mathematic error"

Kevin Fishburne kevinfishburne at ...1887...
Tue Jan 17 11:18:47 CET 2012


On 01/16/2012 02:33 AM, Benoît Minisini wrote:
> Le 16/01/2012 08:05, Kevin Fishburne a écrit :
>> On 01/16/2012 01:43 AM, Kevin Fishburne wrote:
>>> Why would I get the runtime error "Mathematic error" in this function:
>>>
>>> Public Function Distance(x1 As Single, y1 As Single, x2 As Single, y2 As
>>> Single) As Single
>>>       Return Abs(Sqr((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)))
>>> End
>>>
>>> The values of the variables are:
>>>
>>> ?x2&    ""&    x1&    ""&    x2&    ""&    x1&    ""&    y2&    ""&    y1&    ""&    y2&
>>> ""&    y1
>>>
>>> 174.248779296875 2.40799128109576E-41 174.248779296875
>>> 2.40799128109576E-41 146.759170532227 7.19552647834628E+27
>>> 146.759170532227 7.19552647834628E+27
>>>
>>> Using GAMBAS 3, revision unknown. I'm recompiling now to see if it makes
>>> a difference, but please let me know what this error means and what
>>> could cause it.
>>>
>> I changed the first line (old one) to the second:
>>
>> 'Return Abs(Sqr((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)))
>> Return Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2)
>>
>> and it gives me no problems. Seems like I really screwed up the distance
>> calculation, but even so this may be a bug so hopefully I've contributed
>> to a solution. Still curious of course as to what the error might mean.
>> Maybe it should just say "You suck at math." :)
>>
> You get a mathematic error because of an overflow. (y2 - y1) * (y2 - y1)
> cannot be expressed by a Single in your example.
>
> The "^" operator deals with Float internally, so you don't get an error.
>
> Anyway, to compute a distance, you can use the Hyp() or the Mag()
> function. It will be faster.

Sometimes it calculates without error, other times it doesn't. Changing 
all the datatypes to float doesn't make any difference either. Thanks 
for the efficiency tip on Hyp() and Mag(), but it still looks like 
there's a problem with math here. How should a manual distance 
calculation be expressed without overflow if that's the problem?

-- 
Kevin Fishburne
Eight Virtues
www: http://sales.eightvirtues.com
e-mail: sales at ...1887...
phone: (770) 853-6271





More information about the User mailing list