---
title: "ClikaRT::spec::SymFloat"
sidebar_label: "SymFloat"
description: "A symbolic-or-concrete float, e.g. an interpolation scale that derives a dimension."
---

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

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

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

A symbolic-or-concrete float, e.g. an interpolation scale that derives a dimension. Arithmetic returns [`Result`](../Result.md) because it is fallible: a concrete pair folds immediately, while a symbolic operand is evaluated by the symbolic engine, which can report an error for an unsupported combination.

## Member functions

### SymFloat(double) {#SymFloat}

<div class="api-signature">

**`SymFloat`**(`double` `concrete`)

</div>

A concrete double; implicit, so a plain literal composes directly.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 130

</div>

### SymFloat(SymInt) {#SymFloat-2}

<div class="api-signature">

`explicit` **`SymFloat`**(`const` [`SymInt`](./SymInt.md)`&` `value`)

</div>

Widen an integer dimension to float (e.g. for `dim * scale`).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 132

</div>

### SymFloat(SymFloat) {#SymFloat-3}

<div class="api-signature">

**`SymFloat`**(`const SymFloat&` `other`)

</div>

Copy: an independent value (a symbolic node, when present, is not shared).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 134

</div>

### SymFloat(SymFloat) {#SymFloat-4}

<div class="api-signature">

**`SymFloat`**(`SymFloat&&` `other`) `noexcept`

</div>

Move: takes over the symbolic node; `other` reverts to a concrete default.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 136

</div>

### operator=(SymFloat) {#operator-assign}

<div class="api-signature">

[`SymFloat`](./SymFloat.md)`&` **`operator=`**(`const` [`SymFloat`](./SymFloat.md)`&` `other`)

</div>

Copy-assign; same value semantics as the copy ctor.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 138

</div>

### operator=(SymFloat) {#operator-assign-2}

<div class="api-signature">

[`SymFloat`](./SymFloat.md)`&` **`operator=`**([`SymFloat`](./SymFloat.md)`&&` `other`) `noexcept`

</div>

Move-assign; same transfer as the move ctor.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 140

</div>

### \~SymFloat() {#SymFloat-5}

<div class="api-signature">

**`~SymFloat`**()

</div>

Releases the symbolic node, if any.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 142

</div>

### add() {#add}

<div class="api-signature">

[`SymFloat`](./SymFloat.md) **`add`**(`const` [`SymFloat`](./SymFloat.md)`&` `other`) `const`

</div>

Symbolic addition; a concrete pair folds immediately.

**Throws**

- `ClikaRT::Error`: when the symbolic engine cannot evaluate the combination (see the class note).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 148

</div>

### sub() {#sub}

<div class="api-signature">

[`SymFloat`](./SymFloat.md) **`sub`**(`const` [`SymFloat`](./SymFloat.md)`&` `other`) `const`

</div>

Symbolic subtraction.

**Throws**

- `ClikaRT::Error`: as [`add`](./SymFloat.md#add).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 151

</div>

### mul() {#mul}

<div class="api-signature">

[`SymFloat`](./SymFloat.md) **`mul`**(`const` [`SymFloat`](./SymFloat.md)`&` `other`) `const`

</div>

Symbolic multiplication.

**Throws**

- `ClikaRT::Error`: as [`add`](./SymFloat.md#add).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 154

</div>

### div() {#div}

<div class="api-signature">

[`SymFloat`](./SymFloat.md) **`div`**(`const` [`SymFloat`](./SymFloat.md)`&` `other`) `const`

</div>

Symbolic division.

**Throws**

- `ClikaRT::Error`: as [`add`](./SymFloat.md#add).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 157

</div>

### to\_int() {#to_int}

<div class="api-signature">

[`SymInt`](./SymInt.md) **`to_int`**([`DataType`](../../index.md#DataType) `dtype` `=` [`DataType::Int64`](../../index.md#DataType)) `const`

</div>

Truncate toward zero to an integer dimension (== floor for the non-negative values shapes use). [`dtype`](../dtype/index.md) is the integer target.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 161

</div>

### is\_concrete() {#is_concrete}

<div class="api-signature">

`bool` **`is_concrete`**() `const noexcept`

</div>

True when this holds a plain double (no symbolic node).

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 164

</div>

### concrete\_value() {#concrete_value}

<div class="api-signature">

`std::optional<double>` **`concrete_value`**() `const`

</div>

The value iff [`is_concrete()`](./SymFloat.md#is_concrete), else `nullopt`.

<div class="api-declared">

Declared in `ClikaRT/compute/symbolic.h`, line 166

</div>
