mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Change neutral element of <fNN as iter::Sum> to neg_zero
The neutral element used to be positive zero, but +0 + -0 = +0 so -0 seems better indicated.
This commit is contained in:
parent
a971212545
commit
4908188518
@ -104,7 +104,7 @@ macro_rules! float_sum_product {
|
||||
impl Sum for $a {
|
||||
fn sum<I: Iterator<Item=Self>>(iter: I) -> Self {
|
||||
iter.fold(
|
||||
0.0,
|
||||
-0.0,
|
||||
#[rustc_inherit_overflow_checks]
|
||||
|a, b| a + b,
|
||||
)
|
||||
@ -126,7 +126,7 @@ macro_rules! float_sum_product {
|
||||
impl<'a> Sum<&'a $a> for $a {
|
||||
fn sum<I: Iterator<Item=&'a Self>>(iter: I) -> Self {
|
||||
iter.fold(
|
||||
0.0,
|
||||
-0.0,
|
||||
#[rustc_inherit_overflow_checks]
|
||||
|a, b| a + b,
|
||||
)
|
||||
|
27
library/core/tests/num/float_iter_sum_identity.rs
Normal file
27
library/core/tests/num/float_iter_sum_identity.rs
Normal file
@ -0,0 +1,27 @@
|
||||
#[test]
|
||||
fn f32_ref() {
|
||||
let x: f32 = -0.0;
|
||||
let still_x: f32 = [x].iter().sum();
|
||||
assert_eq!(1. / x, 1. / still_x)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f32_own() {
|
||||
let x: f32 = -0.0;
|
||||
let still_x: f32 = [x].into_iter().sum();
|
||||
assert_eq!(1. / x, 1. / still_x)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f64_ref() {
|
||||
let x: f64 = -0.0;
|
||||
let still_x: f64 = [x].iter().sum();
|
||||
assert_eq!(1. / x, 1. / still_x)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn f64_own() {
|
||||
let x: f64 = -0.0;
|
||||
let still_x: f64 = [x].into_iter().sum();
|
||||
assert_eq!(1. / x, 1. / still_x)
|
||||
}
|
@ -30,6 +30,7 @@ mod int_log;
|
||||
mod ops;
|
||||
mod wrapping;
|
||||
|
||||
mod float_iter_sum_identity;
|
||||
mod ieee754;
|
||||
mod nan;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user