Divide float nanoseconds instead of seconds · model-checking/verify-rust-std@48a835b (original) (raw)

Original file line number Diff line number Diff line change
@@ -1074,7 +1074,9 @@ impl Duration {
1074 1074 #[inline]
1075 1075 #[rustc_const_unstable(feature = "duration_consts_float", issue = "72440")]
1076 1076 pub const fn div_duration_f64(self, rhs: Duration) -> f64 {
1077 -self.as_secs_f64() / rhs.as_secs_f64()
1077 +let self_nanos = (self.secs as f64) * (NANOS_PER_SEC as f64) + (self.nanos.0 as f64);
1078 +let rhs_nanos = (rhs.secs as f64) * (NANOS_PER_SEC as f64) + (rhs.nanos.0 as f64);
1079 + self_nanos / rhs_nanos
1078 1080 }
1079 1081
1080 1082 /// Divide `Duration` by `Duration` and return `f32`.
@@ -1093,7 +1095,9 @@ impl Duration {
1093 1095 #[inline]
1094 1096 #[rustc_const_unstable(feature = "duration_consts_float", issue = "72440")]
1095 1097 pub const fn div_duration_f32(self, rhs: Duration) -> f32 {
1096 -self.as_secs_f32() / rhs.as_secs_f32()
1098 +let self_nanos = (self.secs as f32) * (NANOS_PER_SEC as f32) + (self.nanos.0 as f32);
1099 +let rhs_nanos = (rhs.secs as f32) * (NANOS_PER_SEC as f32) + (rhs.nanos.0 as f32);
1100 + self_nanos / rhs_nanos
1097 1101 }
1098 1102 }
1099 1103