---
title: "ClikaRT::dtype::float4_e2m1_t"
sidebar_label: "float4_e2m1_t"
description: "FP4 E2M1: 1 sign + 2 exponent + 1 mantissa, bias 1. The 16 values are {0, ±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6}; eps 0.5. Low 4 bits of a byte."
---

<!-- 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`

FP4 E2M1: 1 sign + 2 exponent + 1 mantissa, bias 1. The 16 values are \{0, ±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6\}; eps 0.5. Low 4 bits of a byte.

## Static member functions

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

<div class="api-signature">

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

</div>

Reinterpret the low 4 bits of `b` as an encoding without converting.

<div class="api-declared">

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

</div>

## Member functions

### float4\_e2m1\_t() {#float4_e2m1_t}

<div class="api-signature">

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

</div>

<div class="api-declared">

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

</div>

### float4\_e2m1\_t(float) {#float4_e2m1_t-2}

<div class="api-signature">

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

</div>

Convert from fp32 (round-to-nearest-even; saturates on overflow).

<div class="api-declared">

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

</div>

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

<div class="api-signature">

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

</div>

Convert to fp32 (lossless).

<div class="api-declared">

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

</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 320

</div>

## Friends

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

<div class="api-signature">

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

</div>

Compares `a` and `b` by dequantized value.

<div class="api-declared">

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

</div>

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

<div class="api-signature">

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

</div>

Compares `a` and `b` by dequantized value.

<div class="api-declared">

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

</div>

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

<div class="api-signature">

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

</div>

Compares `a` and `b` by dequantized value.

<div class="api-declared">

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

</div>

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

<div class="api-signature">

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

</div>

Compares `a` and `b` by dequantized value.

<div class="api-declared">

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

</div>

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

<div class="api-signature">

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

</div>

Compares `a` and `b` by dequantized value.

<div class="api-declared">

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

</div>

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

<div class="api-signature">

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

</div>

Compares `a` and `b` by dequantized value.

<div class="api-declared">

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

</div>
