crackNum-3.24: CHANGES.md
* Hackage: <http://hackage.haskell.org/package/crackNum>
* GitHub: <http://github.com/LeventErkok/crackNum/>
* Latest Hackage released version: 3.24, 2026-08-17
### Version 3.24, 2026-08-17
* Add a quad-precision example to the help output. `-fqp` has always been
accepted, but `--help` never mentioned it, so the only way to find out it
existed was to trip over the error message for a bad `-f` argument.
* Bring the README up to date: document the installation steps (including the
z3 requirement), add a table of all supported formats, list the rounding
modes, and add worked examples for the FP8, FP4, TF32, and unsigned-word
formats. A couple of the existing sample outputs had drifted from what the
tool actually prints, and are now regenerated.
### Version 3.23, 2026-08-17
* Do not ignore bad flags when `--gui` is given. A mistyped format, such as
`crackNum -ft32 4 --gui`, used to bring the GUI up with nothing selected,
silently swallowing the error the command line would have reported. We now
diagnose the flag first, and only launch the GUI if everything checks out.
* Add quad-precision (`-fqp`) to the format list in both GUIs. It was accepted
on the command line, but was missing from the interfaces.
### Version 3.22, 2026-08-17
* Fix text alignment in the Tcl/Tk GUI's entry fields. We asked for the `Courier`
font, which on X11 is an alias that typically resolves to Nimbus Mono PS. Its
ascent/descent split is lopsided (9/6 at size 11), and since an entry centers
text on the linespace, the glyphs ended up hugging the top of the box with a
large gap underneath. We now pick the first monospaced family that is actually
installed, preferring ones with sane metrics.
### Version 3.21, 2026-08-16
* Add support for TF32 (TensorFloat-32), via `-ftf32`. This is the 19-bit format
with 8 exponent and 10 significand bits, i.e., the exponent range of single
precision with the significand of half precision. Note that we crack the 19
architectural bits; hardware typically carries these in a 32-bit container
with the remaining bits unused.
### Version 3.20, 2026-08-13
* Fix tool lookup in both GUIs: a *directory* named `crackNum` (or `z3`) sitting
on the PATH was accepted as the executable, since directories carry the search
bit and so look executable. The GUI would then fail with a "permission denied"
on that directory. We now require a regular file.
### Version 3.19, 2026-08-13
* Fix decoding in the Tcl/Tk GUI: hex and binary input was silently converted
to decimal before being handed to `crackNum`, so entering `0xdeadbeef` encoded
the value 3735928559 instead of decoding the bit-pattern. Verilog (`N'h`) input
was unaffected.
* Drop the lane count from both GUIs. The number of lanes is inferred from
Verilog (`N'h`) input, and everything else is a single lane, so there was
nothing useful for the interface to set.
### Version 3.18, 2026-08-13
* Add a Tcl/Tk GUI (`GUI/tclGUI/crackNum.tcl`) that works on Linux and macOS.
When `--gui` is used on Linux, `crackNum` now launches this interface
(requires `wish`) instead of erroring out.
* The Tcl/Tk GUI script is now a cabal data-file, so it is installed along
with the binary: `cabal install crackNum` is enough for `crackNum --gui` to
work on Linux, with no PATH setup. To run a different copy of the script,
set `CRACKNUM_TCL`, or put it on your PATH as `crackNum.tcl`.
* Both front-ends now live under `GUI/`: the macOS app moved from `gui/` to
`GUI/swiftGUI/`, and the Tcl/Tk script to `GUI/tclGUI/`.
* Encoding a NaN now always displays the canonical quiet-NaN pattern (sign 0,
all-ones exponent, leading significand bit set; `0x7FC00000` for a single).
SMTLib's floating-point sort has a single NaN value, so the solver returns an
abstract NaN and the concrete bit-pattern shown was whatever the model
materialized -- which could differ between solver/library versions. The
E4M3 path already pinned its NaN this way; the rest now do too.
* Exponent/significand sizes of 1 bit are accepted by `-f`, but the solver
requires at least 2 of each. This now produces a regular error message
instead of an uncaught exception with a backtrace.
### Version 3.17, 2026-08-10
* Add support for the FP4 (E2M1) format, via `-ffp4`. Like E4M3, this format
deviates from IEEE-754: The all-ones exponent encodes the values 4 and 6,
instead of infinity and NaN. Consequently, FP4 can represent neither NaN nor
infinity, and finite values outside of [-6, 6] saturate to the end-points.
### Version 3.16, 2026-07-24
* Add the `--gui` option, launching a graphical interface (macOS) for
interactively encoding/decoding values.
### Version 3.15, 2024-11-09
* Bump up SBV dependence to >= 11.0
### Version 3.14, 2024-09-23
* Fix README
### Version 3.13, 2024-09-23
* Fix help text
### Version 3.12, 2024-04-05
* Fix hexadecimal float parsing for e4m3
### Version 3.11, 2024-04-05
* Allow for encoding of hexadecimal floats
### Version 3.10, 2024-03-01
* More relaxed parsing for verilog input format
### Version 3.9, 2024-02-23
* Fix verilog input format parsing
### Version 3.8, 2024-02-21
* Add support for FP8 formats, as decribed in: https://arxiv.org/pdf/2209.05433.pdf
- E5M2: Which is essentially a synonym for f5+3
- E4M3: Similar to f4+4, except it does not have infinities and interprets NaN values differently
* Fix a bug in cracking of arbitrary-sized floats, that yielded wrong values for some NaN cases
### Version 3.7, 2024-02-15
* Support signaling/quiet indication for decoded NaN values.
* Add support for decoding over multiple lanes. See the -l option.
* Add support for verilog bit-vector notation, e.g., 128'hXXX. If
you use this notation, crackNum will automatically infer the
number of lanes to crack based on the width given; unless
explicitly specified.
### Version 3.6, 2024-01-24
* Be more clear when the provided input isn't a recognizable float,
instead of treating it as NaN implicitly. Thanks to Dmitry Blotsky for
pointing out the confusion.
### Version 3.5, 2024-01-11
* Resolve compilation issues with GHC 9.8 series
### Version 3.4, 2023-04-14
* Fix compilation in previous build
### Version 3.3, 2023-04-14
* Allow compilation with newer versions of SBV
### Version 3.2, 2021-06-30
* Add an explicit note when conversion is exact.
### Version 3.1, 2021-03-29
* Fix readme
### Version 3.0, 2021-03-29
* A complete rewrite, much simplified, and supporting
arbitrary precision floats. Some of the old features
and the library are dropped; so if you rely on the library
nature of CrackNum, do not upgrade. For other users who
merely use crackNum as an executable, the new version is
strongly recommended.
### Version 2.4, 2020-09-05
* Changes required to compile cleanly with GHC 8.10.2
### Version 2.3, 2018-11-17
* Remove dependency on the ieee754 and reinterpret-cast packages. The goal is
to remove any FFI dependencies. We now define and export the required
utilities directly in the CrackNum package.
### Version 2.2, 2018-09-01
* Instead of data-binary-ieee754, use reinterpret-cast package. According
to documents, the former is deprecated.
### Version 2.1, 2018-07-20
* Support for vi-editor bindings. See the file "crackNum.vim" in the
distribution or in the github repo You can put "so ~/.vim/crackNum.vim"
(use the correct path!) and have vi crack numbers directly from inside
your editor. Simply locate your cursor on a binary/hex stream of digits
and type ":CrackNum". See the "crackNum.vim" file for binding details.
### Version 2.0, 2018-03-17
* Import FloatingHex qualified to avoid GHC 8.4.1 compilation issue
### Version 1.9, 2017-01-22
* Minor fix to printing of +/-0
### Version 1.8, 2017-01-15
* Bump up FloatingHex dependency to >0.4, this enables
proper support for large doubles
### Version 1.7, 2017-01-14
* Fix a snafu in reading hexadecimal floats
### Version 1.6, 2017-01-14
* Add support for hexadecimal-floats. These now
work both in toIEEE option as input, and also
when printing the values out. (i.e., numbers
of the form 0x1.abp-3, etc.)
### Version 1.5, 2016-01-23
* Typo fixes; no functionality changes
### Version 1.4, 2016-01-17
* Fix NaN nomenclature: Screaming->Signaling
* Add an example to README.md
### Version 1.3, 2015-04-11
* Fix docs, github location
### Version 1.2, 2015-04-11
* Fix the constant qnan values for SP/DP
* Add conversions from float/double. Much easier to use.
* Better handling of nan values.
### Version 1.1, 2015-04-02
* Clean-up the API, examples etc.
### Version 1.0, 2015-04-01
* First implementation. Supports HP/SP/DP
and signed/unsigned numbers in 8/16/32/64 bits.