[Gambas-user] gb3: "Mathematic error"

Fabien Bodard gambas.fr at ...626...
Tue Jan 17 18:38:00 CET 2012


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).
:)
>
> --
> Benoît Minisini
>
> ------------------------------------------------------------------------------
> 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 at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user



-- 
Fabien Bodard




More information about the User mailing list