Re: [eigen] Matrix2i mean

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


On 05/11/2019 16.11, Peter wrote:
[...]

actually, this would also be interesting for the scalar products in general, namely a different type for accumulating the sums within a scalar product, e.g. as yet another template parameter for the matrices.

Adding another template parameter to basic types is not an option. This would break ABI and API compatibility (even if the parameter has a default).

You could create your own custom type `my_int16` for which `my_int16 * my_int16` results in a `my_int32` (this needs to be told to Eigen, similar to how real*complex products are handled).

[...]

I think it's more subtle than that.
Even

   int16_t  Two =  2;
   int16_t  Max =  INT16_MAX;
   int16_t mean = ( Max/2 + Max + Two + Two ) / int16_t(4);

doesn't produce an overflow.

Yes, because `Max/2` gets implicitly converted to `int`. Actually, even adding two `int16_t` get implicitly converted to `int` (search for integer promotion rules -- I don't know them entirely either). And dividing an `int` by an `int16_t` results in an `int` which is only afterwards converted to `int16_t`.

In contrast, Eigen::DenseBase::sum() does something (more or less) equivalent to:

    T sum = T(0);
    for(Index i=0; i< size(); ++i)
        sum+=coeff(i);
    return sum;

i.e., after each addition the result gets reduced to the scalar type of the matrix, thus it will immediately overflow.

And mean() essentially just takes the return value of `sum()` and divides it by the size.


Christoph


--
 Dr.-Ing. Christoph Hertzberg

 Besuchsadresse der Nebengeschäftsstelle:
 DFKI GmbH
 Robotics Innovation Center
 Robert-Hooke-Straße 5
 28359 Bremen, Germany

 Postadresse der Hauptgeschäftsstelle Standort Bremen:
 DFKI GmbH
 Robotics Innovation Center
 Robert-Hooke-Straße 1
 28359 Bremen, Germany

 Tel.:     +49 421 178 45-4021
 Zentrale: +49 421 178 45-0
 E-Mail:   christoph.hertzberg@xxxxxxx

 Weitere Informationen: http://www.dfki.de/robotik
  -------------------------------------------------------------
  Deutsches Forschungszentrum für Künstliche Intelligenz GmbH
  Trippstadter Strasse 122, D-67663 Kaiserslautern, Germany

  Geschäftsführung:
  Prof. Dr. Jana Koehler (Vorsitzende)
  Dr. Walter Olthoff

  Vorsitzender des Aufsichtsrats:
  Prof. Dr. h.c. Hans A. Aukes
  Amtsgericht Kaiserslautern, HRB 2313
  -------------------------------------------------------------




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