Practical Geometric Algebra question: When implementing 3d GA in code, what do we call the combination of a scalar and a bivector that the geometric product returns?

A "rotor" is a scalar+bivector but it would feel strange for the geometric product to return that type. I would like to call the type <SOMETHING> and then make <SOMETHING> castable to a rotor, if that makes sense?

Or maybe I'm wrong and the operation should return a rotor type because that is what that primitive is called?

Basically, is there a more general name for a scalar+bivector other than rotor? Or is the point that the product can return any number of different primitives depending on the input (scalar, bivector, trivector, ...)?
@acegikmo I noticed that you are in the GA rabbit hole as well, do you know the answer to my question above? :)

@gustav it would be a rotor if it's only capable of carrying the real and bivector part ie: {r,yz,zx,xy}

but if you want it to carry all elements then it would be called a multivector, ie, having these components:
{r,x,y,z,yz,zx,xy,xyz}

@gustav the output type of the geometric product depends on the input types, and for two vectors, the output is a rotor, and for two rotors, the output is another rotor, etc.

however, they can all be expressed as a multivector, but, doing a full GA multivector*multivector multiplication is, quite a lot lol

@acegikmo Okay, that makes sense, thanks!

Can we get more than trivectors in 3d? If not, the GA product could return a multivector but in the case for the overloaded function with 2 normal input vectors, the trivector part of the result would be set to 0? That would not do any unnecessary calculations and we would only "waste" one float most of the time.

Still trying to wrap my head around how to code this without doing heap-allocated data for simple primitives :p

@gustav 3D VGA can never go beyond the trivector no! the multivector {r,x,y,z,yz,zx,xy,xyz} can represent all elements of 3D VGA, I think that's what it means when people say the algebra is "closed under multiplication"

The full multivector multiplication is a *lot* of calculations, so you'll want to skip the ones you aren't using. like yeah you could use complex numbers where the imaginary part is 0 for all floats, but, it would be a lil wasteful

@acegikmo Cool, thanks!

I'm using matrices in my framework/engine currently (for ease-of-use/understandability) but looking forward to trying out GA for rotations in the future. Seems like the way to go for rotations and robust intersection algorithms in general!

@gustav generally you would use both

matrices are still faster for space transformation, including rotations, while quaternions/rotors are faster for compositing/interpolating rotations

@acegikmo Wouldn't representing Transform as position/rotor/scale instead of a matrix both be less memory and result in less computation when multiplied? (Matrices would support non-rigidbody scale though)
@gustav for composition/multiplication yeah, but when transforming a single vector, I'm pretty sure regular ol transformation matrices are still faster (though they take up more memory)
@acegikmo Cool! Thanks again for the explanation.