The 3factor (or 3fold or ternary) cross product in 8 dimensions (briefly, the "3in8") is mentioned from time to time in the algebraic literature, but concrete examples are rarely furnished. This site offers instances specific enough that they can be programmed into a computer — in fact we found them through a computerassisted search.
A few preliminaries:
A = [ a_{0}, a_{1}, a_{2}, a_{3}, a_{4}, a_{5}, a_{6}, a_{7} ]
or specifically:
B = [ +0.12, +4.53, −9.8, 0.0, +1.84, −2.25, −0.76, +1.52 ]
The notation is upper case for vectors, lower case for scalars.
A · B = a_{0}b_{0} + a_{1}b_{1} + a_{2}b_{2} + a_{3}b_{3} + a_{4}b_{4} + a_{5}b_{5} + a_{6}b_{6} + a_{7}b_{7}
Using that, the Euclidean magnitude of A becomes  A  = √ ( A · A ).
A + B = [ a_{0} + b_{0}, a_{1} + b_{1}, a_{2} + b_{2}, a_{3} + b_{3}, a_{4} + b_{4}, a_{5} + b_{5}, a_{6} + b_{6}, a_{7} + b_{7} ]
xA = [ xa_{0}, xa_{1}, xa_{2}, xa_{3}, xa_{4}, xa_{5}, xa_{6}, xa_{7} ]
Naturally, −A is defined as −1 · A.
Our baseline example of a 3in8 is established in the following condensed version of a longer table:
Table 1.  

U_{0} × U_{1} × U_{2} = +U_{3}  U_{0} × U_{1} × U_{3} = −U_{2}  U_{0} × U_{2} × U_{3} = +U_{1}  U_{1} × U_{2} × U_{3} = −U_{0} 
U_{0} × U_{1} × U_{4} = +U_{5}  U_{0} × U_{1} × U_{5} = −U_{4}  U_{0} × U_{4} × U_{5} = +U_{1}  U_{1} × U_{4} × U_{5} = −U_{0} 
U_{0} × U_{1} × U_{6} = +U_{7}  U_{0} × U_{1} × U_{7} = −U_{6}  U_{0} × U_{6} × U_{7} = +U_{1}  U_{1} × U_{6} × U_{7} = −U_{0} 
U_{0} × U_{2} × U_{4} = +U_{6}  U_{0} × U_{2} × U_{6} = −U_{4}  U_{0} × U_{4} × U_{6} = +U_{2}  U_{2} × U_{4} × U_{6} = −U_{0} 
U_{0} × U_{2} × U_{5} = −U_{7}  U_{0} × U_{2} × U_{7} = +U_{5}  U_{0} × U_{5} × U_{7} = −U_{2}  U_{2} × U_{5} × U_{7} = +U_{0} 
U_{0} × U_{3} × U_{4} = −U_{7}  U_{0} × U_{3} × U_{7} = +U_{4}  U_{0} × U_{4} × U_{7} = −U_{3}  U_{3} × U_{4} × U_{7} = +U_{0} 
U_{0} × U_{3} × U_{5} = −U_{6}  U_{0} × U_{3} × U_{6} = +U_{5}  U_{0} × U_{5} × U_{6} = −U_{3}  U_{3} × U_{5} × U_{6} = +U_{0} 
U_{1} × U_{2} × U_{4} = +U_{7}  U_{1} × U_{2} × U_{7} = −U_{4}  U_{1} × U_{4} × U_{7} = +U_{2}  U_{2} × U_{4} × U_{7} = −U_{1} 
U_{1} × U_{2} × U_{5} = +U_{6}  U_{1} × U_{2} × U_{6} = −U_{5}  U_{1} × U_{5} × U_{6} = +U_{2}  U_{2} × U_{5} × U_{6} = −U_{1} 
U_{1} × U_{3} × U_{4} = +U_{6}  U_{1} × U_{3} × U_{6} = −U_{4}  U_{1} × U_{4} × U_{6} = +U_{3}  U_{3} × U_{4} × U_{6} = −U_{1} 
U_{1} × U_{3} × U_{5} = −U_{7}  U_{1} × U_{3} × U_{7} = +U_{5}  U_{1} × U_{5} × U_{7} = −U_{3}  U_{3} × U_{5} × U_{7} = +U_{1} 
U_{2} × U_{3} × U_{4} = −U_{5}  U_{2} × U_{3} × U_{5} = +U_{4}  U_{2} × U_{4} × U_{5} = −U_{3}  U_{3} × U_{4} × U_{5} = +U_{2} 
U_{2} × U_{3} × U_{6} = −U_{7}  U_{2} × U_{3} × U_{7} = +U_{6}  U_{2} × U_{6} × U_{7} = −U_{3}  U_{3} × U_{6} × U_{7} = +U_{2} 
U_{4} × U_{5} × U_{6} = −U_{7}  U_{4} × U_{5} × U_{7} = +U_{6}  U_{4} × U_{6} × U_{7} = −U_{5}  U_{5} × U_{6} × U_{7} = +U_{4} 
To obtain the other entries, note that:
• Exchanging exactly two factors negates the product. • If two factors are equal, the product is zero. • If any factor is zero, the product is zero. 
See also a demonstrator program in C++11.
This function fulfills the two requirements usually expected of anything called a cross product:
( A × B × C ) · A = ( A × B × C ) · B = ( A × B × C ) · C = 0
The positive and negative signs within in each row of table 1 alternate; otherwise orthogonality would fail.
(A × B × C) · (A × B × C) = det 

This function has many other characteristics like those of the 2factor cross product in 3 dimensions (the 2in3), such as:
A × B × C = − A × C × B = − C × B × A = − B × A × C 
A × B × C = B × C × A = C × A × B 
( A × B × C ) × D × E ≠ A × ( B × C × D ) × E ≠ A × B × ( C × D × E )
Indeed, it is difficult to find any meaningful relationship among the three associations. However, because of anticommutativity we do have trivalued associativity, which resembles the binary alternate associativity:
+ ( A × B × C ) × A × B = − A × ( B × C × A ) × B = + A × B × ( C × A × B )
+ ( A × B × C ) · D = − ( B × C × D ) · A = + ( C × D × A ) · B = − ( D × A × B ) · C
( A + B ) × C × D = A × C × D + B × C × D A × ( B + C ) × D = A × B × D + A × C × D A × B × ( C + D ) = A × B × C + A × B × D 
( xA ) × ( yB ) × ( zC ) = ( xyz ) ( A × B × C )
Because multiplication distributes over addition, and scalars can be factored out, a multiplication table that gives the products of all the combinations of basis vectors is sufficient to define the function.
In discussing vector spaces over the complex numbers, we write a prefix tilde (as in ~A) to represent conjugation of the individual components. This nonstandard symbol was chosen because it is easily rendered in simple HTML, it is available in the C++ language in which the demonstrator program was written, and because it resembles a negative sign, which is pertinent because conjugation involves negation. As usual,
~A = [ ~a_{0}, ~a_{1}, ~a_{2}, ~a_{3}, ~a_{4}, ~a_{5}, ~a_{6}, ~a_{7} ]
Fundamental is this relation:
~A × ~B × ~C = ~ ( A × B × C )
In calculating the complex dot product, the practice of conjugating one of the factors, usually the second, is widespread throughout mathematics. However, in this cross product environment such conjugation does more harm than good, therefore we will never automatically conjugate any factor, whether of a dot or cross product. Rather, any conjugation will expressly indicated with a tilde. In fact, the following items require nonconjugative dot multiplication in order to succeed:
( A × B × C ) · A = ( A × B × C ) · B = ( A × B × C ) · C = 0
+ ( A × B × C ) · D = − ( B × C × D ) · A = + ( C × D × A ) · B = − ( D × A × B ) · C
and two specifically complex variations of it:
+ ( A × ~B × C ) · ~D =
− ( B × ~C × D ) · ~A =
+ ( C × ~D × A ) · ~B =
− ( D × ~A × B ) · ~C
+ ( ~A × B × ~C ) · D =
− ( ~B × C × ~D ) · A =
+ ( ~C × D × ~A ) · B =
− ( ~D × A × ~B ) · C
With complex vectors, it is sometimes true that  A × B × C  is greater than  A   B   C ; by contrast, with real vectors the inequality would typically be in the opposite sense. This is related to the fact that the sine function of a real argument has a magnitude no greater than unity, but the sine of a complex argument is unbounded.
The 3in8 operation can be repeated to effect a kind of exponentiation. Even though the 3in8 cannot be directly used to form a composition algebra, certain configurations of repeated cross multiplication do give exponential growth or decay. To describe them, it helps to have a superscript notation which expands as follows:
n  A^{n}B^{n}C  A^{n}BC^{n}  AB^{n}C^{n} 
0  C  B  A 
1  A × B × C  A × B × C  A × B × C 
2  A × B × (A × B × C)  A × (A × B × C) × C  (A × B × C) × B × C 
3  A × B × (A × B × (A × B × C))  A × (A × (A × B × C) × C) × C  ((A × B × C) × B × C) × B × C 
…  et cetera 
Note that the zeroth power does not yield anything resembling a multiplicative identity.
This exponential nature is revealed by the following ratios of magnitudes for the eightdimensional vectors when their components are real numbers:
 A^{n+2}B^{n+2}C  :
 A^{n+1}B^{n+1}C  ::
 A^{n+1}B^{n+1}C  :
 A^{n}B^{n}C 
whenever n ≥ 2
and for vectors of complex numbers, which skip a step:
 A^{n+3}B^{n+3}C  :
 A^{n+2}B^{n+2}C  ::
 A^{n+1}B^{n+1}C  :
 A^{n}B^{n}C 
whenever n ≥ 2
Naturally, the same thing applies to A^{n}BC^{n} and AB^{n}C^{n}. The failure of the ratios for n < 2 suggests that generalizing the operation to negative exponents is doubtful.
Nontrivial is to solve A × B × C = D for C, when A, B and D are furnished.
The baseline cross product is one of 32 obtained by rearranging the positive and negative signs. Each such sign arrangement has 30 versions obtained by permuting the basis vectors. Hence there are 960 varieties of this 3in8, all essentially the same. The possibility remains open that some substantially different 3in8s exist.
Something similar happens in a sevendimensional space of orthonormal basis V = { V_{0}, V_{1}, V_{2}, V_{3}, V_{4}, V_{5}, V_{6} } with the twofactor cross product (the 2in7). There are 8 arrangements of sign for each of 60 permutations, yielding 480 varieties.
Some, if not all, definitions of the 3in8 yield closure for certain fourdimensional subspaces. With the 960 functions of the baseline family, any one of the following four equations implies the other three:
U_{a} × U_{b} × U_{c} = +U_{d}
U_{b} × U_{c} × U_{d} = −U_{a}
U_{c} × U_{d} × U_{a} = +U_{b}
U_{d} × U_{a} × U_{b} = −U_{c}
Analogously, any one of the following equations for the 2in7 implies the other two:
V_{a} × V_{b} = ± V_{c}
V_{b} × V_{c} = ± V_{a}
V_{c} × V_{a} = ± V_{b}
Returning to the 3in8, we introduce the black diamond symbol ♦ to indicate a vector that zeroes some of its components, the digits after the diamond indicating which components to retain. For instance,
A♦0123 =  [ a_{0},  a_{1},  a_{2},  a_{3},  0,  0,  0,  0  ] 
B♦0257 =  [ b_{0},  0,  b_{2},  0,  0,  b_{5},  0,  b_{7}  ] 
C♦1247 =  [ 0,  c_{1},  c_{2},  0,  c_{4},  0,  0,  c_{7}  ] 
We call each ♦wxyz symbol a diamond quadruple. With that, we can in the case of the baseline cross product write:
(A × B × C)♦0123 = A♦0123 × B♦0123 × C♦0123
The behavior in this case is isomorphic to the 3factor cross product in 4 dimensions (the 3in4). Besides ♦0123, this is also true for ♦0145, ♦0167, ♦0246, ♦0257, ♦0347, ♦0356, ♦1247, ♦1256, ♦1346, ♦1357, ♦2345, ♦2367 and ♦4567. These combinations will vary if the subscripts are permuted, but not if the signs are rearranged.
Recall the relation from above:
 A × B × C  =  A   B   C  when A · B = B · C = C · A = 0
This is satisfied in a fourdimensional subspace corresponding to a diamond quadruple, even if the vectors have complex components; contrast that it fails with eightdimensional vectors that have complex components.
Here are the diamond quadruples broken down all the way:
A × B × C  = A♦0123 × B♦0123 × C♦0123  + A♦4567 × B♦4567 × C♦4567 
+ A♦0145 × B♦0145 × C♦0145  + A♦2367 × B♦2367 × C♦2367  
+ A♦0167 × B♦0167 × C♦0167  + A♦2345 × B♦2345 × C♦2345  
+ A♦0246 × B♦0246 × C♦0246  + A♦1357 × B♦1357 × C♦1357  
+ A♦0257 × B♦0257 × C♦0257  + A♦1346 × B♦1346 × C♦1346  
+ A♦0347 × B♦0347 × C♦0347  + A♦1256 × B♦1256 × C♦1256  
+ A♦0356 × B♦0356 × C♦0356  + A♦1247 × B♦1247 × C♦1247 
Thus the baseline 3in8 is the sum of fourteen instances of the 3in4; a nontrivial question is whether all possible 3in8s do something along the same lines. Some guidance may be gleaned from the fact that the 2in7 can always be written as the sum of seven instances of the 2in3. In particular, suppose D and E are two vectors in V. A counterpart to the table above is the table below, with its diamond triples, for a particular 2in7:
D × E  = D♦012 × E♦012 
+ D♦034 × E♦034  
+ D♦056 × E♦056  
+ D♦135 × E♦135  
+ D♦146 × E♦146  
+ D♦236 × E♦236  
+ D♦245 × E♦245 
Under the baseline 3in8, the nondiamond quadruples exhibit a behavior we call anticlosure.
There is considerable computational expense associated with figuring a 3in8 cross product when each vector is stored as eight floating point numbers.
The primitive approch to finding A × B × C involves successively calculating a_{0}b_{0}c_{0}, a_{0}b_{0}c_{1}, a_{0}b_{0}c_{2} et cetera. With 512 = 8^{3} combinations of elements, and 2 multiplications per combination, this entails 1024 multiplications. Additions number 504 = 512 − 8. It is possible to build a 64element cache containing a_{0}b_{0}, a_{0}b_{1}, a_{0}b_{2} et cetera, and then multiply each cache member by each element of c. This entails 576 = 64 + 64 · 8 multiplications, but does not reduce the additions.
Depending on the computer hardware, time might be saved by testing for, and bypassing, those combinations that surely turn into zero, such as a_{2}b_{3}c_{2}. Of the 512 combinations, 336 = 8 · 7 · 6 survive, leaving about onethird (176) to vanish. When this is done, additions drop to 328 = 336 − 8. In conjunction with such bypassing, a 56element cache (a_{0}b_{1}, a_{0}b_{2}, a_{0}b_{3} et cetera) would reduce the number of multiplications from 672 = 336 · 2 to 392 = 336 + 56.
Another matter is that if the vectors are stored as arrays, there will be some integer address calculation at each access. However, this will probably be a minor contributor to running time as the arithmetic needed for using arrays is generally simple, and operations of integer arithmetic generally run considerably faster than those of floatingpoint.
Never to be ruled out is the discovery of an ingenious algorithm of remarkable efficiency.
The discussion of diamond quadruples above reveals that the 3in4 cross product is precisely the 3in8 cross product restricted to a particular subspace of U.
Calculating a 3in4 requires about oneeighth as many multiplications as a 3in8. This observation may be of help to a researcher who is using computerized brute force techniques in searching for theorems. Depending on the nature of the theorems, it might be possible to save time by testing each candidate theorem on the 3in4 cross product; if a theorem fails there, there is no need to try it with the more expensive 3in8.
We have defined the baseline 3in8 by means of an explicit table. There are other ways to specify a 3in8, two of which employing octonions are presented below. Octonion multiplication is intimately related with the 2in7, much as quaternion multiplication is connected with the 2in3. For clarity, we use the ⊗ symbol for octonion multiplication instead of the customary juxtaposition.
Here are two distinct operations on an eightdimensional vector:
~A = [ ~a_{0}, ~a_{1}, ~a_{2}, ~a_{3}, ~a_{4}, ~a_{5}, ~a_{6}, ~a_{7} ]
!A = [ −a_{0}, −a_{1}, −a_{2}, −a_{3}, −a_{4}, −a_{5}, −a_{6}, +a_{7} ]
The bang was selected for much the same reasons as the tilde; among other things, in the C++ language both pertain to negation.
Several authors, including Gray, have given two formulas that yield two nonisomorphic families of 3in8s:
A × B × C = ± ( −
A ⊗ (!B ⊗ C) +
(A · B) C +
(B · C) A −
(C · A) B
)
A × B × C = ± ( −
(A ⊗ !B) ⊗ C +
(A · B) C +
(B · C) A −
(C · A) B
)
Meanwhile, Lee and Leung offer this:
A × B × C = ( A ⊗ ( !B ⊗ C ) − C ⊗ ( !B ⊗ A ) ) ÷ 2
A ternary magma.
Students of abstract algebra might discard all notion of vectors and scalars, and consider merely a 17element ternary magma. The objects in the magma are symbolized as:
+u_{0}, +u_{1}, +u_{2}, +u_{3}, +u_{4}, +u_{5}, +u_{6}, +u_{7},
0,
−u_{0}, −u_{1}, −u_{2}, −u_{3}, −u_{4}, −u_{5}, −u_{6}, −u_{7}
and the sole operation is cross multiplication, the baseline operation a satisfactory choice. (Along the same lines is the procedure by which the quaternion group may be extracted from the quaternions.)
The × symbol can be dropped, condensing the notation, because there is only one operation. That operation is cancellative when nonzero, meaning this:
if acd = bcd ≠ 0 then a = b
if abd = acd ≠ 0 then b = c
if abc = abd ≠ 0 then c = d
Suppose a, b, c, d and e are all nonzero and pairwise distinct. Then, exchanging middle factors, we can say:
if abc = +cde then adc = −cbe
By resequencing the factors within each cross product, we can move the exchange point from the middle to the left or right.
Here is a rather limited extension of the Jacobi identity. Suppose that a, b, c, d and e are elements of { +u_{0}, +u_{1}, +u_{2}, +u_{3}, +u_{4}, +u_{5}, +u_{6}, +u_{7} }, and suppose further that a, b, c, d and e meet one of these conditions:
(abc)de + (bcd)ea + (cde)ab + (dea)bc + (eab)cd + (ace)bd + (ceb)da + (ebd)ac + (bda)ce + (dac)eb = 0 
Comments:
Summary listing of other pages on this site: