On 01/17/2012 12:38 PM, Fabien Bodard wrote:
> Le 17 janvier 2012 16:22, Benoît Minisini
> <gam...@users.sourceforge.net>  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: sa...@eightvirtues.com
phone: (770) 853-6271


------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Gambas-user mailing list
Gambas-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to