|
11 | 11 | use {Category, ExpInt, IEK_INF, IEK_NAN, IEK_ZERO};
|
12 | 12 | use {Float, FloatConvert, ParseError, Round, Status, StatusAnd};
|
13 | 13 |
|
| 14 | +use smallvec::{SmallVec, smallvec}; |
14 | 15 | use std::cmp::{self, Ordering};
|
15 | 16 | use std::convert::TryFrom;
|
16 | 17 | use std::fmt::{self, Write};
|
@@ -1962,7 +1963,7 @@ impl<S: Semantics> IeeeFloat<S> {
|
1962 | 1963 | // to hold the full significand, and an extra limb required by
|
1963 | 1964 | // tcMultiplyPart.
|
1964 | 1965 | let max_limbs = limbs_for_bits(1 + 196 * significand_digits / 59);
|
1965 |
| - let mut dec_sig = Vec::with_capacity(max_limbs); |
| 1966 | + let mut dec_sig: SmallVec<[Limb; 1]> = SmallVec::with_capacity(max_limbs); |
1966 | 1967 |
|
1967 | 1968 | // Convert to binary efficiently - we do almost all multiplication
|
1968 | 1969 | // in a Limb. When this would overflow do we do a single
|
@@ -2021,11 +2022,11 @@ impl<S: Semantics> IeeeFloat<S> {
|
2021 | 2022 |
|
2022 | 2023 | const FIRST_EIGHT_POWERS: [Limb; 8] = [1, 5, 25, 125, 625, 3125, 15625, 78125];
|
2023 | 2024 |
|
2024 |
| - let mut p5_scratch = vec![]; |
2025 |
| - let mut p5 = vec![FIRST_EIGHT_POWERS[4]]; |
| 2025 | + let mut p5_scratch = smallvec![]; |
| 2026 | + let mut p5: SmallVec<[Limb; 1]> = smallvec![FIRST_EIGHT_POWERS[4]]; |
2026 | 2027 |
|
2027 |
| - let mut r_scratch = vec![]; |
2028 |
| - let mut r = vec![FIRST_EIGHT_POWERS[power & 7]]; |
| 2028 | + let mut r_scratch = smallvec![]; |
| 2029 | + let mut r: SmallVec<[Limb; 1]> = smallvec![FIRST_EIGHT_POWERS[power & 7]]; |
2029 | 2030 | power >>= 3;
|
2030 | 2031 |
|
2031 | 2032 | while power > 0 {
|
@@ -2064,7 +2065,7 @@ impl<S: Semantics> IeeeFloat<S> {
|
2064 | 2065 | let calc_precision = (LIMB_BITS << attempt) - 1;
|
2065 | 2066 | attempt += 1;
|
2066 | 2067 |
|
2067 |
| - let calc_normal_from_limbs = |sig: &mut Vec<Limb>, |
| 2068 | + let calc_normal_from_limbs = |sig: &mut SmallVec<[Limb; 1]>, |
2068 | 2069 | limbs: &[Limb]|
|
2069 | 2070 | -> StatusAnd<ExpInt> {
|
2070 | 2071 | sig.resize(limbs_for_bits(calc_precision), 0);
|
|
0 commit comments