support multiplication of two float3 operands
Hi,
Thanks for your work.
I have a C code with variables in float3 data type. So I included float3.h header file in my code and compiled it with g++. It seems that the library doesn't support the multiplication of two float3 operands, am I right?
For example for the following line:
((float3*)((float*)compute1 + (0)))[0] = (((float3*)((float*)compute1 + (0)))[0] + (((float3*)((float*)placeholder + (0)))[0] * ((float3*)((float*)placeholder1 + ((y_outer_x_outer_fused * 3))))[0]));
I get this error:
error: no match for ‘operator*’ (operand types are ‘math::float3’ and ‘math::float3’)
((float3*)((float*)compute1 + (0)))[0] = (((float3*)((float*)compute1 + (0)))[0] + (((float3*)((float*)placeholder + (0)))[0] * ((float3*)((float*)placeholder1 + ((y_outer_x_outer_fused * 3))))[0]));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
That is true, float3 * float3 is not supported by default. The rationale behind that back in the time was that point-wise multiplication is not a mathematically defined operation in linear spaces, and would possibly be a programming bug. There is a #define MATH_ENABLE_UNCOMMON_OPERATIONS that you can enable at command line to enable float3 * float3.
See https://github.com/juj/MathGeoLib/blob/2940b99b99cfe575dd45103ef20f4019dee15b54/src/Math/float3.h#L155
Instead, by default the more explicit form oneFloat3.Mul(anotherFloat3) is used, so to be explicit when point-wise multiplication is taking place.
In hindsight it is possible that no confusion would arise from enabling it by default, but back then that was the thinking.
Thanks. It's solved.