---
title: "ClikaRT::dtype::nf4_t"
sidebar_label: "nf4_t"
description: "nf4_t: a 4-bit index into a 16-entry table of standard-normal quantiles scaled to [-1, +1]. No exponent/mantissa structure; purely a lookup quantizer."
---

<!-- Generated by tools/doxygen2mdx from Doxygen XML. Do not edit. -->

<span class="api-kind api-kind--struct">struct</span>

**Header:** `ClikaRT/compute/scalar_types.h`

[nf4\_t](./nf4_t.md): a 4-bit index into a 16-entry table of standard-normal quantiles scaled to \[-1, +1\]. No exponent/mantissa structure; purely a lookup quantizer. Callers normalize their data to roughly \[-1, +1\] (e.g. per-block max-abs scaling) before quantizing; out-of-range inputs saturate to ±1. The table is monotonic, so the stored index orders the same as the dequantized value. Low 4 bits of a byte.

Reference: Dettmers et al., "QLoRA" (2023), §3.1.

## Static member functions

### from\_bits() {#from_bits}

<div class="api-signature">

`static` `constexpr` [`nf4_t`](./nf4_t.md) **`from_bits`**(`std::uint8_t` `b`) `noexcept`

</div>

Reinterpret the low 4 bits of `b` as a table index without converting.

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 365

</div>

## Member functions

### nf4\_t() {#nf4_t}

<div class="api-signature">

`constexpr` `constexpr` **`nf4_t`**() `noexcept=default`

</div>

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 356

</div>

### nf4\_t(float) {#nf4_t-2}

<div class="api-signature">

`explicit` **`nf4_t`**(`float` `f`) `noexcept`

</div>

Quantize a normalized fp32 (in \[-1, +1\]) to the nearest table index.

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 359

</div>

### operator float() {#operator-float}

<div class="api-signature">

**`operator float`**() `const noexcept`

</div>

Dequantize (a single table lookup).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 362

</div>

## Data members

### bits {#bits}

<div class="api-signature">

`std::uint8_t` **`bits`** `= 0`

</div>

Raw encoding in the low 4 bits (the storage/ABI form).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 354

</div>

## Friends

### operator== {#operator-eq}

<div class="api-signature">

`friend` `bool` **`operator==`**([`nf4_t`](./nf4_t.md) `a`, [`nf4_t`](./nf4_t.md) `b`) `noexcept`

</div>

Compares `a` and `b` by table index (monotonic, so index order equals value order).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 368

</div>

### operator\!= {#operator-ne}

<div class="api-signature">

`friend` `bool` **`operator!=`**([`nf4_t`](./nf4_t.md) `a`, [`nf4_t`](./nf4_t.md) `b`) `noexcept`

</div>

Compares `a` and `b` by table index (monotonic, so index order equals value order).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 369

</div>

### operator\< {#operator-lt}

<div class="api-signature">

`friend` `bool` **`operator<`**([`nf4_t`](./nf4_t.md) `a`, [`nf4_t`](./nf4_t.md) `b`) `noexcept`

</div>

Compares `a` and `b` by table index (monotonic, so index order equals value order).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 370

</div>

### operator\<= {#operator-le}

<div class="api-signature">

`friend` `bool` **`operator<=`**([`nf4_t`](./nf4_t.md) `a`, [`nf4_t`](./nf4_t.md) `b`) `noexcept`

</div>

Compares `a` and `b` by table index (monotonic, so index order equals value order).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 371

</div>

### operator\> {#operator-gt}

<div class="api-signature">

`friend` `bool` **`operator>`**([`nf4_t`](./nf4_t.md) `a`, [`nf4_t`](./nf4_t.md) `b`) `noexcept`

</div>

Compares `a` and `b` by table index (monotonic, so index order equals value order).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 372

</div>

### operator\>= {#operator-ge}

<div class="api-signature">

`friend` `bool` **`operator>=`**([`nf4_t`](./nf4_t.md) `a`, [`nf4_t`](./nf4_t.md) `b`) `noexcept`

</div>

Compares `a` and `b` by table index (monotonic, so index order equals value order).

<div class="api-declared">

Declared in `ClikaRT/compute/scalar_types.h`, line 373

</div>
