[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