You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
bors[bot] 2f0cffd522
Merge #99
99: Revive Float+Real in no_std thanks to libm r=cuviper a=yoanlcq


This is a hopeful fix for #75.  
Basically: Add `libm` as an optional dependency, and handle three possible cases depending on which features are enabled:
- std and libm: std is used;
- std and not libm: std is used;
- libm and not std: libm and FloatCore are used.

It was briefly mentioned that `libm` wasn't ready yet, but this was months ago, and I believe it is better not to wait for too long.  
If anything, bugs in `libm` should be fixed in `libm`; `num-traits` is only delegating its implementations to it; not to mention that the more `libm` is used, the likelier issues are to be found and hopefully fixed.

Thanks in advance!

Co-authored-by: Yoan Lecoq <>
Co-authored-by: Josh Stone <>
4 years ago
ci CI: make the condition for testing libm the same as u128/i128 4 years ago
src Merge #99 4 years ago
tests Run cargo fmt 5 years ago
.gitignore Update num-macros to Rust master 8 years ago
.travis.yml Merge #99 4 years ago
Cargo.toml Raise the minimum libm 4 years ago
LICENSE-APACHE Initial seeding from rust repo 9 years ago
LICENSE-MIT Initial seeding from rust repo 9 years ago Reference PR 99 in README 4 years ago Release 0.2.8 4 years ago
bors.toml Enable bors-ng 6 years ago Use autocfg to probe for i128 4 years ago


crate documentation minimum rustc 1.8 Travis status

Numeric traits for generic mathematics in Rust.


Add this to your Cargo.toml:

num-traits = "0.2"

and this to your crate root:

extern crate num_traits;


This crate can be used without the standard library (#![no_std]) by disabling the default std feature. Use this in Cargo.toml:

version = "0.2"
default-features = false
# features = ["libm"]    # <--- Uncomment if you wish to use `Float` and `Real` without `std`

The Float and Real traits are only available when either std or libm is enabled.
The libm feature is only available with Rust 1.31 and later (see PR #99).

The FloatCore trait is always available. MulAdd and MulAddAssign for f32 and f64 also require std or libm, as do implementations of signed and floating- point exponents in Pow.

Implementations for i128 and u128 are only available with Rust 1.26 and later. The build script automatically detects this, but you can make it mandatory by enabling the i128 crate feature.


Release notes are available in


The num-traits crate is tested for rustc 1.8 and greater.