StochasticArithmetic.jl
Stochastic Arithmetic to diagnose Floating-Point problems in Julia
Install / Use
/learn @ffevotte/StochasticArithmetic.jlREADME
StochasticArithmetic.jl
<!--




 -->
It is relatively well known in the scientific computing community that the use of finite-precision floating-point (FP) computations (as opposed to computations with real, infinite-precision numbers) can be the source of quality losses in the computed results.
Stochastic Arithmetic is one of many ways which can be used to diagnose FP-related problems. In standard IEEE-754-compliant Floating-Point Arithmetic, the result of each floating-point operation is rounded to the nearest representable floating-point value. When some floating-point operations produce results which are not representable as floating-point values (as is the case, for example of 1/3 in base 10, or 1/10 in binary representations), some information is lost during this rounding operation. Stochastic Arithmetic models this loss of accuracy using random variables.
This package implements the CESTAC arithmetic [Jean Vignes and Michel La Porte. Error Analysis in Computing, 1974] in which the result of each FP operation is randomly rounded upwards or downwards. When a complete computation is run with Stochastic Arithmetic, its results become realizations of a random variable. Studying the distribution of this random variable helps understanding the global impact of round-off errors on the computation.
Taking the example of an ill-conditioned dot product:
julia> x = ...
100-element Array{Float64,1}:
-47.03899089072116
-2302.2081944322417
-156472.61080419843
15263.008992086134
-213.23078574079136
[...]
julia> y = ...
100-element Array{Float64,1}:
-1.2528717788873576
1078.9625210090078
-31748.947458491493
-0.015303734559162641
4.784478272815557
[...]
julia> using LinearAlgebra
julia> dot(x, y)
0.8098193831511069
julia> @reliable_digits dot(SFloat64.(x), SFloat64.(y))
(0.8097595996923976, 3.798286681716415)
In the last instruction above, vectors were converted to a stochastic type
(SFloat64), effectively transforming the result of the dot product into a
random variable. Macro call @reliable_digits performs the computation a few
times and computes statistics estimating that:
- the averaged result is approximately 0.810,
- only 3 to 4 (decimal) digits should be relied upon in this result; the other are likely numerical noise.
See the full documentation for more details.
<br/> <hr/>Other tools
CESTAC and similar stochastic methods are currently implemented in various tools, such as:
-
CADNA: a library to be used by Fortran and C/C++ programs;
-
Verificarlo: an LLVM-based tool instrumenting programs at compile-time;
-
Verrou: a Valgrind-based tool which dynamically instruments binary executables. The techniques used in StochasticArithmetic.jl closely follow those implemented in Verrou.
Related Skills
node-connect
350.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.9kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
350.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
350.1kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
