Skip to content

support multiplication of two float3 operands #68

Open

Description

@sahooora

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]));
                                                                                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Activity

  1. juj commented on Jan 7, 2021

    @juj
    Owner

    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

    #ifdef MATH_ENABLE_UNCOMMON_OPERATIONS

    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.

  2. sahooora commented on Jan 7, 2021

    @sahooora
    Author

    Thanks.
    It's solved.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions