diff options
| author | Sébastien Crozet <developer@crozet.re> | 2021-06-02 17:26:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-06-02 17:26:47 +0200 |
| commit | 8a3103a35b2ee5773dda6bb92870d9bfadc6ba70 (patch) | |
| tree | 91f32796670d519cc1b60a1afdfc0c3701513b07 /src/dynamics | |
| parent | d3d998e91e39e64b9bdd9060ba7904218fd8cfbe (diff) | |
| parent | 6356dca1d5a753768bbb479aa9491805223e1c60 (diff) | |
| download | rapier-8a3103a35b2ee5773dda6bb92870d9bfadc6ba70.tar.gz rapier-8a3103a35b2ee5773dda6bb92870d9bfadc6ba70.tar.bz2 rapier-8a3103a35b2ee5773dda6bb92870d9bfadc6ba70.zip | |
Merge pull request #195 from tpdickso/ungenerate-nans
Add feature flag to disable floating point exceptions in unexceptional code
Diffstat (limited to 'src/dynamics')
| -rw-r--r-- | src/dynamics/solver/velocity_constraint.rs | 8 | ||||
| -rw-r--r-- | src/dynamics/solver/velocity_constraint_element.rs | 8 | ||||
| -rw-r--r-- | src/dynamics/solver/velocity_ground_constraint_element.rs | 7 |
3 files changed, 20 insertions, 3 deletions
diff --git a/src/dynamics/solver/velocity_constraint.rs b/src/dynamics/solver/velocity_constraint.rs index e15f2d8..90c574c 100644 --- a/src/dynamics/solver/velocity_constraint.rs +++ b/src/dynamics/solver/velocity_constraint.rs @@ -385,7 +385,13 @@ where let relative_linvel = linvel1 - linvel2; let mut tangent_relative_linvel = relative_linvel - force_dir1 * (force_dir1.dot(&relative_linvel)); - let tangent_linvel_norm = tangent_relative_linvel.normalize_mut(); + + let tangent_linvel_norm = { + let _disable_fe_except = + crate::utils::DisableFloatingPointExceptionsFlags::disable_floating_point_exceptions(); + tangent_relative_linvel.normalize_mut() + }; + let threshold: N::Element = na::convert(1.0e-4); let use_fallback = tangent_linvel_norm.simd_lt(N::splat(threshold)); let tangent_fallback = force_dir1.orthonormal_vector(); diff --git a/src/dynamics/solver/velocity_constraint_element.rs b/src/dynamics/solver/velocity_constraint_element.rs index 1324c35..d1ad6ac 100644 --- a/src/dynamics/solver/velocity_constraint_element.rs +++ b/src/dynamics/solver/velocity_constraint_element.rs @@ -99,7 +99,13 @@ impl<N: SimdRealField> VelocityConstraintTangentPart<N> { self.impulse[0] - self.r[0] * dimpulse_0, self.impulse[1] - self.r[1] * dimpulse_1, ); - let new_impulse = new_impulse.simd_cap_magnitude(limit); + let new_impulse = { + let _disable_fe_except = + crate::utils::DisableFloatingPointExceptionsFlags:: + disable_floating_point_exceptions(); + new_impulse.simd_cap_magnitude(limit) + }; + let dlambda = new_impulse - self.impulse; self.impulse = new_impulse; diff --git a/src/dynamics/solver/velocity_ground_constraint_element.rs b/src/dynamics/solver/velocity_ground_constraint_element.rs index 8bcdc82..c4c6393 100644 --- a/src/dynamics/solver/velocity_ground_constraint_element.rs +++ b/src/dynamics/solver/velocity_ground_constraint_element.rs @@ -78,7 +78,12 @@ impl<N: SimdRealField> VelocityGroundConstraintTangentPart<N> { self.impulse[0] - self.r[0] * dimpulse_0, self.impulse[1] - self.r[1] * dimpulse_1, ); - let new_impulse = new_impulse.simd_cap_magnitude(limit); + let new_impulse = { + let _disable_fe_except = + crate::utils::DisableFloatingPointExceptionsFlags:: + disable_floating_point_exceptions(); + new_impulse.simd_cap_magnitude(limit) + }; let dlambda = new_impulse - self.impulse; self.impulse = new_impulse; |
