softplus
std.elementwise.softplus · Level L1Softplus in its overflow-free form. Mathematically identical to log(1 + eˣ), which the reference uses.
Signature
softplus(x: f64[n]) → f64[n]
Structure
The function as NOVA stores it: one box per input, operation and output, and arrows that carry values. A double border marks another library function this one runs — called once, or by Scan once per element; select it to open that function.
- input
- operation
- constant
- call
- output
Verification
- Signature proven by NOVA’s shape solver, for every size.
- Agrees with the reference
np.log(1 + np.exp(x))to 80 digits (100-digit arithmetic), on all 40 test cases. - All 179 float64 results inside the running error bound; the closest uses 93% of it.
- Interpreter and NumPy backend return bit-identical results.
- correctly rounded (the float64 nearest the exact value)
- 64%
- bit-equal to the NumPy formula in float64
- 80%
- largest error, in units in the last place
- 1.3e+9
Large ulp counts appear where a result is tiny next to the numbers it is computed from (after cancellation, for example), so one unit in the last place is tiny too; the absolute error is still inside the bound. Results within their own error of zero are not counted.
Note
The graph never computes eˣ for large x, so it cannot overflow; the verification shows it equals the naive formula exactly in 100-digit arithmetic.
Control handle
- Symbol
- Ω:std.elementwise.softplus · Ω:softplus
- Pins
sha256:c00099ec9806a5faeb92a61a318ee7d77414165ba1ecb4153b793ca7da81d2aathis graph and the 1 it reaches through calls- Evidence
sha256:820be5d63c7eaa43f76e97890b13bad097fc38befa7e966b4ffcae27966da449the hash of its verification record- Needs
- no capability: a pure function
Through NOVA’s control layer, the symbol launches this function only while the program still matches what it pins: a change to this graph, or to any graph it reaches, needs a migration first.