[Gambas-user] gb3: "Mathematic error"

Kevin Fishburne kevinfishburne at ...1887...
Thu Jan 19 05:31:13 CET 2012


On 01/17/2012 12:38 PM, Fabien Bodard wrote:
> Le 17 janvier 2012 16:22, Benoît Minisini
> <gambas at ...1...>  a écrit :
>> Le 17/01/2012 11:35, Kevin Fishburne a écrit :
>>> On 01/17/2012 05:18 AM, Kevin Fishburne wrote:
>>>> 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?
>>>>
>>> Just discovered it has to do with one of the passed values being zero.
>>> Why is that?
>>>
>> Apparently you are not shocked by a coordinate of 7.19E+27... That
>> causes the overflow with Single (not Float).
> :)
>

Sorry guys. It was that time of the night when one sees two of 
everything. I called it a night and picked it up the next day with no 
problems. Bad data was being fed to the function as a result of 
something unrelated.

-- 
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