# nan-default  [](https://crates.io/crates/nan-default) [](https://docs.rs/nan-default) [](https://gitlab.com/mfairman/nan-default)
## NaN Default Derive Macro
A macro which lets you create structs whose floating-point members
(f32, f64) are initialized as `NAN` rather than `0.0` by default.
Struct members which are not floats get `Default::default()`
assignments, and partial defaulting via `..Default::default()` is
also supported.
This can be convenient when using the special NAN state of a
floating point number to designate it as invalid or uninitialized,
rather than wrapping it in an `Option` which takes some extra
space — especially if you have many of them. Of course, any
operations on such variables need to check for this state just as
they would need to check for the `Some` variant of an `Option`
(albeit without idiomatic if-let statements, mapping, and so on).
Depending on the application, `is_nan()` or `!is_finite()` may be
appropriate functions to perform the check.
## Example
```rust
use nan_default::NanDefault;
#[derive(NanDefault)]
struct Data {
a: f32,
b: [f64; 10],
c: i32,
}
fn basic() {
let data = Data::default();
assert!(data.a.is_nan());
assert!(data.b[9].is_nan());
assert_eq!(data.c, 0);
}
```