Skip to content

Commit 446ca5b

Browse files
Non-zero result of Vector3.Cross with parallel vectors (#119438)
* Non-zero result of Vector3.Cross with parallel vectors * fix first remark * improve codegen Co-authored-by: Tanner Gooding <tagoo@outlook.com> --------- Co-authored-by: Tanner Gooding <tagoo@outlook.com>
1 parent 760992e commit 446ca5b

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

src/libraries/System.Numerics.Vectors/tests/Vector3Tests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,17 @@ public void Vector3CrossTest1()
207207
Assert.True(MathHelper.Equal(expected, actual), "Vector3f.Cross did not return the expected value.");
208208
}
209209

210+
// A test for Cross (Vector3f, Vector3f)
211+
// Cross test of the same parallel vector
212+
[Fact]
213+
public void Vector3CrossSameParallelVectors()
214+
{
215+
var v = new Vector3(-1, 1, 0);
216+
var n = Vector3.Normalize(v);
217+
var actual = Vector3.Cross(n, n);
218+
Assert.Equal(Vector3.Zero, actual);
219+
}
220+
210221
// A test for Distance (Vector3f, Vector3f)
211222
[Fact]
212223
public void Vector3DistanceTest()

src/libraries/System.Private.CoreLib/src/System/Numerics/Vector3.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -471,13 +471,10 @@ public static Vector3 Cross(Vector3 vector1, Vector3 vector2)
471471
Vector128<float> v1 = vector1.AsVector128Unsafe();
472472
Vector128<float> v2 = vector2.AsVector128Unsafe();
473473

474-
Vector128<float> temp = Vector128.Shuffle(v1, Vector128.Create(1, 2, 0, 0)) * Vector128.Shuffle(v2, Vector128.Create(2, 0, 1, 0));
474+
Vector128<float> temp1 = Vector128.Shuffle(v1, Vector128.Create(1, 2, 0, 0)) * Vector128.Shuffle(v2, Vector128.Create(2, 0, 1, 0));
475+
Vector128<float> temp2 = Vector128.Shuffle(v1, Vector128.Create(2, 0, 1, 0)) * Vector128.Shuffle(v2, Vector128.Create(1, 2, 0, 0));
475476

476-
return Vector128.MultiplyAddEstimate(
477-
-Vector128.Shuffle(v1, Vector128.Create(2, 0, 1, 0)),
478-
Vector128.Shuffle(v2, Vector128.Create(1, 2, 0, 0)),
479-
temp
480-
).AsVector3();
477+
return (temp1 - temp2).AsVector3();
481478
}
482479

483480
/// <inheritdoc cref="Vector4.DegreesToRadians(Vector4)" />

0 commit comments

Comments
 (0)