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