Re: [eigen] inverse unit test

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Reading your answer, I understand that I was not clear enough and
silly, so let me try again:
ei_isMuchSmallerThan is

inline bool ei_isMuchSmallerThan(float a, float b, float prec =
NumTraits<float>::dummy_precision())
{
 return ei_abs(a) <= ei_abs(b) * prec;
}

so what I understand is that in fact it checks if |a|/|b| is less than prec

but here what is required is to test if x is less prec so it is not
exactly the same.
However I understand that if you choose b = prec and prec = 1, you
achieve the same result but it is not very user friendly in my opinion
because a precision of 1.0 does not match my understanding of the
precision parameter and is far from the default value.

What I want to point is that I agree that we need a two parameters
function, but here we have a 3 parameter function.
And as a lazzy people I would really love to have a default value for
the second parameter...

Manu

P.S. Please, forget about my first remark, it was silly.



On Thu, Jun 10, 2010 at 9:54 AM, Gael Guennebaud
<gael.guennebaud@xxxxxxxxx> wrote:
>
> well, if you do isMuchSmallerThan(x,0) then that clearly means you want to
> check the x equals 0.
>
> Now let's consider isApproxZero(x); How can we decide whether x is close to
> zero without knowing the context, i.e., without knowing the magnitude of
> your non zeros? This is why we really have to add a "reference value"
> parameter to this function. So isApproxZero(x) becomes
> isApproxZero(x,reference) == isZeroComparedTo(x,reference) ==
> isMuchSmallerThan(x,reference).
>
> The only purpose of the isMuchSmallerThan function is to check a value is
> nearly zero. Nothing else. So this is really what you want.
>
> gael
>
> On Thu, Jun 10, 2010 at 9:42 AM, Manuel Yguel <manuel.yguel@xxxxxxxxx>
> wrote:
>>
>> I hit the same problem several times and the implementation of
>> isMuchSmallerThan for float is:
>>
>> inline bool ei_isMuchSmallerThan(float a, float b, float prec =
>> NumTraits<float>::dummy_precision())
>> {
>>  return ei_abs(a) <= ei_abs(b) * prec;
>> }
>>
>> if b is zero, then whatever prec is, it will failed if a is not zero,
>> so I do agree with Hauke that his implementation is needed.
>> So in fact in my own code I finally used the function he proposed.
>>
>>
>> - cheers,
>>
>> Manu
>>
>>
>
>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/