Skip to content

rustdocs for f32.rs and f64.rs #1684

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jan 27, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
189 changes: 66 additions & 123 deletions src/libcore/f32.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
/*
Module: f32

Floating point operations and constants for `f32`
*/
#[doc = "Floating point operations and constants for `f32`"];

// PORT

Expand All @@ -29,113 +25,87 @@ type t = f32;
// These are not defined inside consts:: for consistency with
// the integer types

/* Const: NaN */
const NaN: f32 = 0.0_f32/0.0_f32;

/* Const: infinity */
const infinity: f32 = 1.0_f32/0.0_f32;

/* Const: neg_infinity */
const neg_infinity: f32 = -1.0_f32/0.0_f32;

/* Predicate: isNaN */
pure fn is_NaN(f: f32) -> bool { f != f }

/* Function: add */
pure fn add(x: f32, y: f32) -> f32 { ret x + y; }

/* Function: sub */
pure fn sub(x: f32, y: f32) -> f32 { ret x - y; }

/* Function: mul */
pure fn mul(x: f32, y: f32) -> f32 { ret x * y; }

/* Function: div */
pure fn div(x: f32, y: f32) -> f32 { ret x / y; }

/* Function: rem */
pure fn rem(x: f32, y: f32) -> f32 { ret x % y; }

/* Predicate: lt */
pure fn lt(x: f32, y: f32) -> bool { ret x < y; }

/* Predicate: le */
pure fn le(x: f32, y: f32) -> bool { ret x <= y; }

/* Predicate: eq */
pure fn eq(x: f32, y: f32) -> bool { ret x == y; }

/* Predicate: ne */
pure fn ne(x: f32, y: f32) -> bool { ret x != y; }

/* Predicate: ge */
pure fn ge(x: f32, y: f32) -> bool { ret x >= y; }

/* Predicate: gt */
pure fn gt(x: f32, y: f32) -> bool { ret x > y; }

// FIXME replace the predicates below with llvm intrinsics or calls
// to the libmath macros in the rust runtime for performance

/*
Predicate: is_positive

Returns true if `x` is a positive number, including +0.0f320 and +Infinity.
*/
#[doc(
brief = "Returns true if `x` is a positive number, including +0.0f320 and +Infinity."
)]
pure fn is_positive(x: f32) -> bool
{ ret x > 0.0f32 || (1.0f32/x) == infinity; }

/*
Predicate: is_negative

Returns true if `x` is a negative number, including -0.0f320 and -Infinity.
*/
#[doc(
brief = "Returns true if `x` is a negative number, including -0.0f320 and -Infinity."
)]
pure fn is_negative(x: f32) -> bool
{ ret x < 0.0f32 || (1.0f32/x) == neg_infinity; }

/*
Predicate: is_nonpositive

Returns true if `x` is a negative number, including -0.0f320 and -Infinity.
(This is the same as `f32::negative`.)
*/
#[doc(
brief = "Returns true if `x` is a negative number, including \
-0.0f320 and -Infinity. (This is the same as \
`f32::negative`.)"
)]
pure fn is_nonpositive(x: f32) -> bool {
ret x < 0.0f32 || (1.0f32/x) == neg_infinity;
}

/*
Predicate: nonnegative

Returns true if `x` is a positive number, including +0.0f320 and +Infinity.
(This is the same as `f32::positive`.)
*/
#[doc(
brief = "Returns true if `x` is a positive number, \
including +0.0f320 and +Infinity. (This is \
the same as `f32::positive`.)"
)]
pure fn is_nonnegative(x: f32) -> bool {
ret x > 0.0f32 || (1.0f32/x) == infinity;
}

/*
Predicate: is_zero

Returns true if `x` is a zero number (positive or negative zero)
*/
#[doc(
brief = "Returns true if `x` is a zero number \
(positive or negative zero)"
)]
pure fn is_zero(x: f32) -> bool {
ret x == 0.0f32 || x == -0.0f32;
}

/*
Predicate: is_infinite

Returns true if `x`is an infinite numer
*/
#[doc(
brief = "Returns true if `x`is an infinite number"
)]
pure fn is_infinite(x: f32) -> bool {
ret x == infinity || x == neg_infinity;
}

/*
Predicate: is_finite

Returns true if `x`is a finite numer
*/
#[doc(
brief = "Returns true if `x`is a finite number"
)]
pure fn is_finite(x: f32) -> bool {
ret !(is_NaN(x) || is_infinite(x));
}
Expand All @@ -146,96 +116,69 @@ pure fn is_finite(x: f32) -> bool {
mod consts {

// FIXME replace with mathematical constants from cmath

/*
Const: pi

Archimedes' constant
*/
#[doc(
brief = "Archimedes' constant"
)]
const pi: f32 = 3.14159265358979323846264338327950288_f32;

/*
Const: frac_pi_2

pi/2.0
*/
#[doc(
brief = "pi/2.0"
)]
const frac_pi_2: f32 = 1.57079632679489661923132169163975144_f32;

/*
Const: frac_pi_4

pi/4.0
*/
#[doc(
brief = "pi/4.0"
)]
const frac_pi_4: f32 = 0.785398163397448309615660845819875721_f32;

/*
Const: frac_1_pi

1.0/pi
*/
#[doc(
brief = "1.0/pi"
)]
const frac_1_pi: f32 = 0.318309886183790671537767526745028724_f32;

/*
Const: frac_2_pi

2.0/pi
*/
#[doc(
brief = "2.0/pi"
)]
const frac_2_pi: f32 = 0.636619772367581343075535053490057448_f32;

/*
Const: frac_2_sqrtpi

2.0/sqrt(pi)
*/
#[doc(
brief = "2.0/sqrt(pi)"
)]
const frac_2_sqrtpi: f32 = 1.12837916709551257389615890312154517_f32;

/*
Const: sqrt2

sqrt(2.0)
*/
#[doc(
brief = "sqrt(2.0)"
)]
const sqrt2: f32 = 1.41421356237309504880168872420969808_f32;

/*
Const: frac_1_sqrt2

1.0/sqrt(2.0)
*/
#[doc(
brief = "1.0/sqrt(2.0)"
)]
const frac_1_sqrt2: f32 = 0.707106781186547524400844362104849039_f32;

/*
Const: e

Euler's number
*/
#[doc(
brief = "Euler's number"
)]
const e: f32 = 2.71828182845904523536028747135266250_f32;

/*
Const: log2_e

log2(e)
*/
#[doc(
brief = "log2(e)"
)]
const log2_e: f32 = 1.44269504088896340735992468100189214_f32;

/*
Const: log10_e

log10(e)
*/
#[doc(
brief = "log10(e)"
)]
const log10_e: f32 = 0.434294481903251827651128918916605082_f32;

/*
Const: ln_2

ln(2.0)
*/
#[doc(
brief = "ln(2.0)"
)]
const ln_2: f32 = 0.693147180559945309417232121458176568_f32;

/*
Const: ln_10

ln(10.0)
*/
#[doc(
brief = "ln(10.0)"
)]
const ln_10: f32 = 2.30258509299404568401799145468436421_f32;
}

Expand Down
Loading