Skip to content

Commit 7ff1020

Browse files
author
Robin Kruppe
committed
Enlarge Bignum type from 1152 to 1280 bits.
This is necessary for decimal-to-float code (in a later commit) to handle inputs such as 4.9406564584124654e-324 (the smallest subnormal f64). According to the benchmarks for flt2dec::dragon, this does not affect performance measurably. It probably uses slightly more stack space though.
1 parent b55806c commit 7ff1020

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

src/libcore/num/flt2dec/bignum.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
//! Custom arbitrary-precision number (bignum) implementation.
1212
//!
1313
//! This is designed to avoid the heap allocation at expense of stack memory.
14-
//! The most used bignum type, `Big32x36`, is limited by 32 × 36 = 1,152 bits
15-
//! and will take at most 152 bytes of stack memory. This is (barely) enough
16-
//! for handling all possible finite `f64` values.
14+
//! The most used bignum type, `Big32x40`, is limited by 32 × 40 = 1,280 bits
15+
//! and will take at most 160 bytes of stack memory. This is more than enough
16+
//! for formatting and parsing all possible finite `f64` values.
1717
//!
1818
//! In principle it is possible to have multiple bignum types for different
1919
//! inputs, but we don't do so to avoid the code bloat. Each bignum is still
@@ -344,10 +344,10 @@ macro_rules! define_bignum {
344344
)
345345
}
346346

347-
/// The digit type for `Big32x36`.
347+
/// The digit type for `Big32x40`.
348348
pub type Digit32 = u32;
349349

350-
define_bignum!(Big32x36: type=Digit32, n=36);
350+
define_bignum!(Big32x40: type=Digit32, n=40);
351351

352352
// this one is used for testing only.
353353
#[doc(hidden)]

src/libcore/num/flt2dec/strategy/dragon.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use cmp::Ordering;
2323
use num::flt2dec::{Decoded, MAX_SIG_DIGITS, round_up};
2424
use num::flt2dec::estimator::estimate_scaling_factor;
2525
use num::flt2dec::bignum::Digit32 as Digit;
26-
use num::flt2dec::bignum::Big32x36 as Big;
26+
use num::flt2dec::bignum::Big32x40 as Big;
2727

2828
static POW10: [Digit; 10] = [1, 10, 100, 1000, 10000, 100000,
2929
1000000, 10000000, 100000000, 1000000000];

src/libcoretest/num/flt2dec/strategy/dragon.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::prelude::v1::*;
1212
use std::{i16, f64};
1313
use super::super::*;
1414
use core::num::flt2dec::*;
15-
use core::num::flt2dec::bignum::Big32x36 as Big;
15+
use core::num::flt2dec::bignum::Big32x40 as Big;
1616
use core::num::flt2dec::strategy::dragon::*;
1717

1818
#[test]

0 commit comments

Comments
 (0)