[Gambas-user] gb3: "Mathematic error"

Benoît Minisini gambas at ...1...
Mon Jan 16 08:33:37 CET 2012


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.

Regards,

-- 
Benoît Minisini




More information about the User mailing list