#float #f32 #f64 #浮点数 #增加 #nextafter

float_next_after

一个用于原生 Rust f64/f32 nextafter 的特质

7 个版本 (1 个稳定版)

1.0.0 2022年12月11日
0.1.5 2020年4月13日

#110算法

Download history 52036/week @ 2024-03-14 43280/week @ 2024-03-21 37081/week @ 2024-03-28 42305/week @ 2024-04-04 43044/week @ 2024-04-11 43000/week @ 2024-04-18 41760/week @ 2024-04-25 49858/week @ 2024-05-02 47797/week @ 2024-05-09 62320/week @ 2024-05-16 61004/week @ 2024-05-23 64818/week @ 2024-05-30 65802/week @ 2024-06-06 71625/week @ 2024-06-13 64738/week @ 2024-06-20 53887/week @ 2024-06-27

269,095 每月下载量
369 个crate中使用 (直接使用14个)

MIT 许可证

17KB
225

float-next-after

codecov Documentation License: MIT Crates.io Crates.io

这是一个原生 Rust 的 next after float 函数,它作为特质为 f32 和 f64 类型提供。它向下一个可表示的浮点数前进,即使它是非规格化的。如果不需要非规格化,用户应自行处理这种情况。有关版本化变更日志,请参阅 CHANGES.md

对于特定的边缘情况,已经做出了以下决策

  • self == y -> 返回 y
  • self >= 正无穷大 -> 返回正无穷大
  • self <= 负无穷大 -> 返回负无穷大
  • self 或 y == NaN -> 返回 NaN
  • self = -0.0 且 y = 0.0 -> 返回正 0.0
  • self == -0.0 且 y == 正无穷大 -> 5e-324

请参阅单元测试,了解在其他各种异常情况下的实际行为。

此代码使用 f32 和 f64 的 ToBits 和 FromBits 函数。这两个函数只是将 f32/f64 转换为 u32/u64。然而,这些函数的文档声称它们是安全的,并且“关于 sNaN 的安全问题被夸大了!”

欢迎提出 PR 和其他有价值的反馈。

使用方法

use float_next_after::NextAfter;

// Large numbers
let big_num = 16237485966.00000437586943_f64;
let next = big_num.next_after(std::f64::INFINITY);
assert_eq!(next, 16237485966.000006_f64);

// Expected handling of 1.0
let one = 1_f64;
let next = one.next_after(std::f64::INFINITY);
assert_eq!(next, 1_f64 + std::f64::EPSILON);

// Tiny (negative) numbers
let zero = 0_f32;
let next = zero.next_after(std::f32::NEG_INFINITY);
assert_eq!(next, -0.000000000000000000000000000000000000000000001_f32);

// Equal source/dest (even -0 == 0)
let zero = 0_f64;
let next = zero.next_after(-0_f64);
assert_eq!(next, -0_f64);

无运行时依赖