dashu-macros 0.6.0

Procedural macros for the dashu math types: create big-number literals at compile time with ubig!, ibig!, fbig!, dbig!, rbig!, and cbig! (plus their static_ variants for const contexts). Each literal follows the same parsing rules as the corresponding dashu type, producing values of UBig, IBig, FBig, RBig, or CBig in any supported base.
Documentation
Create an arbitrary precision float number ([dashu_float::FBig]) with base 2 rounding towards zero.

This macro only accepts binary or hexadecimal literals. It doesn't allow decimal literals because
the conversion is not always lossless. Therefore if you want to create an [FBig][dashu_float::FBig]
instance with decimal literals, use the [dbig!] macro and then change the radix with
[with_base][dashu_float::FBig::with_base].

```rust
# use dashu_macros::fbig;
let a = fbig!(11.001); // digits in base 2, equal to 3.125 in decimal
let b = fbig!(1.101B-3); // exponent in base 2 can be specified using `Bxx`
let c = fbig!(-0x1a7f); // digits in base 16
let d = fbig!(0x03.efp-2); // equal to 0.9833984375 in decimal

// underscores can be used to separate digits
let e = fbig!(0xa54653ca_67376856_5b41f775.f00c1782_d6947d55p-33);

// Due to the limitation of Rust literal syntax, the hexadecimal literal
// with floating point requires an underscore prefix if the first digit is
// not a decimal digit.
let f = fbig!(-_0xae.1f);
let g = fbig!(-0xae1fp-8);
assert_eq!(f, g);
let h = fbig!(-0x12._34);
let i = fbig!(-_0x12.34);
assert_eq!(h, i);
```

The generated float has precision determined by length of digits in the input literal.

```rust
# use dashu_macros::fbig;
let a = fbig!(11.001); // 5 binary digits
assert_eq!(a.precision(), 5);

let b = fbig!(0x0003.ef00p-2); // 8 hexadecimal digits = 32 binary digits
assert_eq!(b.precision(), 32);
assert_eq!(b.digits(), 10); // 0x3ef only has 10 effective bits
```

For numbers that are small enough (significand fits in a [u32]),
the literal can be assigned to a constant.

```rust
# use dashu_macros::fbig;
use dashu_float::FBig;

const A: FBig = fbig!(-1001.10);
const B: FBig = fbig!(0x123);
const C: FBig = fbig!(-0xffff_ffffp-127);
```