Skip to content

Commit

Permalink
Auto merge of #127719 - devnexen:math_log_fix_solill, r=Amanieu
Browse files Browse the repository at this point in the history
std: removes logarithms family function edge cases handling for solaris.

Issue had been fixed over time with solaris, 11.x behaves correctly
 (and we support it as minimum), illumos works correctly too.
  • Loading branch information
bors committed Jul 15, 2024
2 parents 594702e + d939351 commit 0da95bd
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 34 deletions.
6 changes: 3 additions & 3 deletions library/std/src/f64.rs
Original file line number Diff line number Diff line change
Expand Up @@ -520,7 +520,7 @@ impl f64 {
#[stable(feature = "rust1", since = "1.0.0")]
#[inline]
pub fn ln(self) -> f64 {
crate::sys::log_wrapper(self, |n| unsafe { intrinsics::logf64(n) })
unsafe { intrinsics::logf64(self) }
}

/// Returns the logarithm of the number with respect to an arbitrary base.
Expand Down Expand Up @@ -574,7 +574,7 @@ impl f64 {
#[stable(feature = "rust1", since = "1.0.0")]
#[inline]
pub fn log2(self) -> f64 {
crate::sys::log_wrapper(self, crate::sys::log2f64)
crate::sys::log2f64(self)
}

/// Returns the base 10 logarithm of the number.
Expand All @@ -599,7 +599,7 @@ impl f64 {
#[stable(feature = "rust1", since = "1.0.0")]
#[inline]
pub fn log10(self) -> f64 {
crate::sys::log_wrapper(self, |n| unsafe { intrinsics::log10f64(n) })
unsafe { intrinsics::log10f64(self) }
}

/// The positive difference of two numbers.
Expand Down
31 changes: 0 additions & 31 deletions library/std/src/sys/pal/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -94,36 +94,5 @@ cfg_if::cfg_if! {
}
}

// Solaris/Illumos requires a wrapper around log, log2, and log10 functions
// because of their non-standard behavior (e.g., log(-n) returns -Inf instead
// of expected NaN).
#[cfg(not(test))]
#[cfg(any(target_os = "solaris", target_os = "illumos"))]
#[inline]
pub fn log_wrapper<F: Fn(f64) -> f64>(n: f64, log_fn: F) -> f64 {
if n.is_finite() {
if n > 0.0 {
log_fn(n)
} else if n == 0.0 {
f64::NEG_INFINITY // log(0) = -Inf
} else {
f64::NAN // log(-n) = NaN
}
} else if n.is_nan() {
n // log(NaN) = NaN
} else if n > 0.0 {
n // log(Inf) = Inf
} else {
f64::NAN // log(-Inf) = NaN
}
}

#[cfg(not(test))]
#[cfg(not(any(target_os = "solaris", target_os = "illumos")))]
#[inline]
pub fn log_wrapper<F: Fn(f64) -> f64>(n: f64, log_fn: F) -> f64 {
log_fn(n)
}

#[cfg(not(target_os = "uefi"))]
pub type RawOsError = i32;

0 comments on commit 0da95bd

Please sign in to comment.