Skip to content

Commit

Permalink
std: removes logarithms family function edge cases handling for solaris.
Browse files Browse the repository at this point in the history
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
devnexen committed Jul 14, 2024
1 parent 54435f7 commit 009660d
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 34 deletions.
6 changes: 3 additions & 3 deletions 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 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 009660d

Please sign in to comment.