Repository: jagerber48/sciform

Issue:
Remove binary support
Currently `sciform` supports formatting numbers so that they have a base 2 exponent. The exponents can also be converted into IEC prefixes. It is a bit of a strange formatting. The numbers aren't actually expressed in binary per-se. They are expressed with scientific notation but with the base being 2 instead of 10. I imagine this may be useful for computer science applications. The inclusion of this binary formatting mode was motivated by the [prefixed package](https://pypi.org/project/prefixed/) which includes that sort of formatting.

In short I would like to drop support for these formatting modes. The codebase is already big and a bit cluttered, and the API has very many options. From a maintenance and documentation perspective it would be nice to slim things down a bit. Also value/uncertainty formatting currently isn't supported for binary formatting since I haven't had interest in writing tests and getting it working.

This issue would obviate #101 and #109.

Discussion:

Solution patch:
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index db6a9f40..efaedb4c 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -8,9 +8,21 @@ This project adheres to `Semantic Versioning <https://semver.org/>`_.
 Unreleased
 ----------
 
-* Any unreleased changes can be viewed in the latest version
-  documentation
-  `changelog <https://sciform.readthedocs.io/en/latest/project.html#changelog>`_.
+..
+   * Any unreleased changes can be viewed in the latest version
+     documentation
+     `changelog <https://sciform.readthedocs.io/en/latest/project.html#changelog>`_.
+
+Removed
+^^^^^^^
+
+* Removed all support for base-2 formatting.
+  The ``sciform`` package will focus on base-2 scientific formatting,
+  more relevent for the physical sciences, unless there is demand for
+  base-2 or base-``n`` formatting.
+  We encourage users to consider the `prefixed <https://pypi.org/project/prefixed/>`_
+  package if they have requirements for base-2 formatting.
+  [`#201 <https://github.com/jagerber48/sciform/issues/201>`_]
 
 ----
 
@@ -18,7 +30,7 @@ Unreleased
 -------------------
 
 Fixed
------
+^^^^^
 
 * Corrected a typo in a previous release.
 
@@ -28,7 +40,7 @@ Fixed
 -------------------
 
 Added
------
+^^^^^
 
 * Documented examples demonstrating the interplay between ``sciform``
   formatting the ``decimal`` module configuration.
diff --git a/README.rst b/README.rst
index 7c512d16..cb7f5b65 100644
--- a/README.rst
+++ b/README.rst
@@ -46,10 +46,9 @@ Overview
 
 ``sciform`` is used to convert python numbers into strings according to
 a variety of user-selected scientific formatting options including
-decimal, binary, fixed-point, scientific and engineering formats.
+fixed-point, scientific and engineering formats.
 Where possible, formatting follows documented standards such as those
-published by `BIPM <https://www.bipm.org/en/>`_ or
-`IEC <https://iec.ch/homepage>`_.
+published by `BIPM <https://www.bipm.org/en/>`_.
 ``sciform`` provides certain options, such as engineering notation,
 well-controlled significant figure rounding, and separator customization
 which are not provided by the python built-in
diff --git a/docs/source/exp replacement.rst b/docs/source/exp replacement.rst
index d1b7af2a..fcbf4609 100644
--- a/docs/source/exp replacement.rst	
+++ b/docs/source/exp replacement.rst	
@@ -6,14 +6,11 @@ Supported Exponent Replacements
 :mod:`sciform` offers exponent replacement modes which provide
 translations between exponent strings and conventional alphabetic
 symbol representations.
-For decimal exponents in engineering formats, SI prefix translations are
+For exponents in engineering formats, SI prefix translations are
 available according to the
 `SI prefixes <https://www.nist.gov/pml/owm/metric-si-prefixes>`_.
 It is also possible to convert decimal exponents into
 `parts-per notation <https://en.wikipedia.org/wiki/Parts-per_notation>`_.
-For binary formats, the IEC prefix translations are available matched to
-integer multiples of 10 according to the
-`IEC prefixes <https://physics.nist.gov/cuu/Units/binary.html>`_.
 
 SI Prefixes
 -----------
@@ -161,38 +158,3 @@ override the standard mappings listed above.
 33e-09
 >>> print(formatter(33e-12))
 33 ppb
-
-IEC Prefixes
-------------
-
-.. list-table:: IEC Prefixes
-   :widths: 15, 15, 15
-   :header-rows: 1
-
-   * - Exponent Value
-     - Prefix Name
-     - Prefix
-   * - 2\ :sup:`+80`
-     - yobi
-     - Yi
-   * - 2\ :sup:`+70`
-     - zebi
-     - Zi
-   * - 2\ :sup:`+60`
-     - exi
-     - Ei
-   * - 2\ :sup:`+50`
-     - pebi
-     - Pi
-   * - 2\ :sup:`+40`
-     - tebi
-     - Ti
-   * - 2\ :sup:`+30`
-     - gibi
-     - Gi
-   * - 2\ :sup:`+20`
-     - mebi
-     - Mi
-   * - 2\ :sup:`+10`
-     - kibi
-     - Ki
diff --git a/docs/source/fsml.rst b/docs/source/fsml.rst
index b4b8f4d6..9a70ce44 100644
--- a/docs/source/fsml.rst
+++ b/docs/source/fsml.rst
@@ -26,7 +26,7 @@ The :mod:`sciform` format specification mini-language is given by::
     round_mode         ::=  "!" | "."
     special_round_mode ::=  "A" | "P"
     ndigits            ::=  [+-]?digit+
-    exp_mode           ::=  "f" | "F" | "%" | "e" | "E" | "r" | "R" | "b" | "B" |
+    exp_mode           ::=  "f" | "F" | "%" | "e" | "E" | "r" | "R" |
     exp_val            ::=  [+-]?digit+
 
 Below are two simple FSML usage examples.
@@ -74,8 +74,7 @@ Further details about the options can be found at
        | (``'#'``)
      - The alternate mode flag indicates to use
        :ref:`engineering_shifted` mode when the exponent mode flag is
-       ``'r'`` or ``'R'`` or to use :ref:`binary_iec` mode when the
-       exponent mode flag is ``'b'`` or ``'B'``.
+       ``'r'`` or ``'R'``.
    * - | left_pad_dec_place
        | (``\d+``)
      - Sets ``left_pad_dec_place`` to any non-negative integer.
@@ -93,8 +92,8 @@ Further details about the options can be found at
      - Set ``round_mode`` to ``'all'`` or ``'pdg'``.
        See :ref:`rounding`.
    * - | exp_mode
-       | (``'f'``, ``'F'``, ``'%'``, ``'e'``, ``'E'``, ``'r'``, ``'R'``,
-         ``'b'``, ``'B'``)
+       | (``'f'``, ``'F'``, ``'%'``, ``'e'``, ``'E'``, ``'r'``,
+         ``'R'``)
      - Sets ``exponent_mode``.
        If this flag is capitalized then ``capitalize`` is set to
        ``True``.
@@ -106,8 +105,6 @@ Further details about the options can be found at
        * ``'r'`` and ``'R'`` set :ref:`engineering` or
          :ref:`engineering_shifted` exponent modes depending on if the
          alternate mode flag is used..
-       * ``'b'`` and ``'B'`` set :ref:`binary` or :ref:`binary_iec`
-         exponent modes depending on if the alternate mode flag is used.
    * - | exp_val
        | (``x[+-]\d+``)
      - Sets ``exp_val`` to an integer.
diff --git a/docs/source/options.rst b/docs/source/options.rst
index d2126f65..488ccf73 100644
--- a/docs/source/options.rst
+++ b/docs/source/options.rst
@@ -21,11 +21,11 @@ Exponent Mode
 To display numbers across a wide range of magnitudes, scientific
 formatting presents numbers in the form::
 
-   num = mantissa * base**exp
+   num = mantissa * 10**exp
 
-Where exp is an integer and ``base`` is 10 or 2.
-The different exponent modes control how ``mantissa``, ``base`` and
-``exp`` are chosen for a given input number ``num``.
+Where exp is an integer.
+The different exponent modes control how ``mantissa`` and ``exp`` are
+chosen for a given input number ``num``.
 
 .. _fixed_point:
 
@@ -62,7 +62,7 @@ appended to the end of the formatted string.
 Scientific Notation
 -------------------
 
-Scientific notation is used to display base-10 decimal numbers.
+Scientific notation is used to display numbers.
 In scientific notation, the exponent is uniquely chosen so that the
 mantissa ``m`` satisfies ``1 <= m < 10``.
 
@@ -120,36 +120,6 @@ the exponent is chosen so that the mantissa ``m`` satisfies
 >>> print(formatter(123.456, 0.001))
 (0.123456 ± 0.000001)e+03
 
-.. _binary:
-
-Binary
-------
-
-Binary formatting can be chosen to display a number in scientific
-notation in base-2.
-
->>> formatter = Formatter(exp_mode="binary")
->>> print(formatter(256))
-1b+08
-
-Here ``b`` exponent symbol indicates base-2 instead of base-10.
-For binary formatting, the mantissa ``m`` satisfies ``1 <= m < 2``.
-
-.. _binary_iec:
-
-Binary IEC
-----------
-
-Binary IEC mode is similar to engineering notation, except in base-2.
-In this mode number are expressed in base-2 exponent notation, but the
-exponent is constrained to be a multiple of 10, consistent with the
-IEC binary prefixes.
-The mantissa ``m`` satisfies ``1 <= m < 1024``.
-
->>> formatter = Formatter(exp_mode="binary_iec")
->>> print(formatter(2048))
-2b+10
-
 .. _fixed_exp:
 
 Fixed Exponent
@@ -171,10 +141,8 @@ For fixed point and percent modes an explicit fixed exponent must equal
 0.
 For engineering and shifted engineering modes an explicit fixed exponent
 must be an integer multiple of 3.
-For binary IEC mode an explicit fixed exponent must be an integer
-multiple of 10.
 Because of this constrained behavior, it is recommended to only use a
-fixed exponent with the scientific or binary exponent modes.
+fixed exponent with the scientific exponent mode.
 
 .. _exp_str_replacement:
 
@@ -182,12 +150,11 @@ Exponent String Replacement
 ===========================
 
 :mod:`sciform` provides a number of formatting options for replacing
-decimal and binary exponent strings such as ``'e-03'`` or ``'b+10'``
-with conventional strings such as ``'m'`` or ``'Ki'`` to succinctly
-communicate the order of magnitude.
-Decimal exponent strings can be replaced with either SI prefixes or
-parts-per identifiers and binary exponent strings can be replaced with
-IEC prefixes.
+exponent strings such as ``'e-03'`` with conventional strings such as
+``'m'`` (the SI prefix for milli) to succinctly communicate the order
+of magnitude.
+Exponent strings can be replaced with either SI prefixes or parts-per
+identifiers.
 See :ref:`exp_replacements` for all default supported
 replacements.
 Furthermore, it is possible to customize :class:`Formatter`
@@ -197,14 +164,6 @@ in addition to those provided by default.
 >>> formatter = Formatter(exp_mode="engineering", exp_format="prefix")
 >>> print(formatter(4242.13))
 4.24213 k
->>> formatter = Formatter(
-...     exp_mode="binary_iec",
-...     round_mode="sig_fig",
-...     ndigits=4,
-...     exp_format="prefix",
-... )
->>> print(formatter(1300))
-1.270 Ki
 >>> formatter = Formatter(exp_mode="engineering", exp_format="parts_per")
 >>> print(formatter(12.3e-6))
 12.3 ppm
@@ -217,11 +176,10 @@ Extra Exponent Replacements
 In addition to the default
 :ref:`exponent replacements <exp_replacements>`, The user can modify the
 available exponent replacements using a number of options.
-The SI prefix, IEC prefix, and parts-per replacements can be modified
-using the ``extra_si_prefixes``, ``extra_iec_prefixes`` and
-``extra_parts_per_forms`` options, respectively, and passing in
-dictionaries with keys corresponding to integer exponents and values
-corresponding to translated strings.
+The SI prefix and parts-per replacements can be modified
+using the ``extra_si_prefixes`` and ``extra_parts_per_forms`` options,
+respectively, and passing in dictionaries with keys corresponding to
+integer exponents and values corresponding to translated strings.
 The entries in these dictionaries overwrite any default translation
 mappings.
 
@@ -652,9 +610,6 @@ The capitalization of the exponent character can be controlled
 >>> formatter = Formatter(exp_mode="scientific", capitalize=True)
 >>> print(formatter(42))
 4.2E+01
->>> formatter = Formatter(exp_mode="binary", capitalize=True)
->>> print(formatter(1024))
-1B+10
 
 The ``capitalize`` flag also controls the capitalization of ``nan`` and
 ``inf`` formatting:
@@ -705,7 +660,7 @@ Python supports ``'nan'``, ``'inf'``, and
 and ``'-inf'`` or ``'NAN'``, ``'INF'``, and ``'-INF'``, respectively,
 depending on ``capitalize``.
 However, if ``nan_inf_exp=True`` (default ``False``), then, for
-scientific, percent, engineering, and binary exponent modes, these will
+scientific, percent, and engineering exponent modes, these will
 instead be formatted as, e.g. ``'(nan)e+00'``.
 
 >>> formatter = Formatter(
diff --git a/docs/source/usage.rst b/docs/source/usage.rst
index 098b64ac..84e88127 100644
--- a/docs/source/usage.rst
+++ b/docs/source/usage.rst
@@ -238,9 +238,7 @@ exponents such as ``"n" -> "e-09"``.
 These translations are performed by first checking the default SI
 prefixes along with any global ``extra_si_prefixes``, then checking
 the default parts-per forms along with any global
-``extra_parts_per_forms``, then checking the default IEC prefixes along
-with any global ``extra_iec_prefixes``.
-If an IEC prefix is detected then the exponent base is chosen to be 2.
+``extra_parts_per_forms``.
 if no valid translations are discovered or more than one valid
 translation is discovered an exception is raised.
 
@@ -474,7 +472,6 @@ PopulatedOptions(
  'left_pad_dec_place': 0,
  'exp_format': 'standard',
  'extra_si_prefixes': {},
- 'extra_iec_prefixes': {},
  'extra_parts_per_forms': {},
  'capitalize': False,
  'superscript': False,
@@ -516,7 +513,6 @@ PopulatedOptions(
  'left_pad_dec_place': 0,
  'exp_format': 'standard',
  'extra_si_prefixes': {},
- 'extra_iec_prefixes': {},
  'extra_parts_per_forms': {},
  'capitalize': False,
  'superscript': False,
@@ -615,7 +611,6 @@ PopulatedOptions(
  'left_pad_dec_place': 0,
  'exp_format': 'standard',
  'extra_si_prefixes': {},
- 'extra_iec_prefixes': {},
  'extra_parts_per_forms': {},
  'capitalize': False,
  'superscript': True,
@@ -660,7 +655,6 @@ PopulatedOptions(
  'left_pad_dec_place': 0,
  'exp_format': 'standard',
  'extra_si_prefixes': {},
- 'extra_iec_prefixes': {},
  'extra_parts_per_forms': {},
  'capitalize': False,
  'superscript': True,
diff --git a/src/sciform/api/formatter.py b/src/sciform/api/formatter.py
index 28152f0b..0c24a1e2 100644
--- a/src/sciform/api/formatter.py
+++ b/src/sciform/api/formatter.py
@@ -118,7 +118,6 @@ class Formatter:
      'left_pad_dec_place': 0,
      'exp_format': 'standard',
      'extra_si_prefixes': {},
-     'extra_iec_prefixes': {},
      'extra_parts_per_forms': {},
      'capitalize': False,
      'superscript': True,
@@ -153,7 +152,6 @@ def __init__(  # noqa: PLR0913
         left_pad_dec_place: int | None = None,
         exp_format: option_types.ExpFormat | None = None,
         extra_si_prefixes: dict[int, str] | None = None,
-        extra_iec_prefixes: dict[int, str] | None = None,
         extra_parts_per_forms: dict[int, str] | None = None,
         capitalize: bool | None = None,
         superscript: bool | None = None,
@@ -180,7 +178,6 @@ def __init__(  # noqa: PLR0913
           * ``exp_val`` must be 0 for fixed point and percent modes
           * ``exp_val`` must be a multiple of 3 for engineering and
             shifted engineering modes
-          * ``exp_val`` must be a multiple of 10 for binary iec mode
 
         * ``upper_separator`` may be any of ``['', ',', '.', ' ', '_']``
           but must be different from ``decimal_separator``
@@ -189,13 +186,12 @@ def __init__(  # noqa: PLR0913
 
         :param exp_mode: Specify the exponent formatting mode.
         :type exp_mode: ``Literal['fixed_point', 'percent',
-          'scientific', 'engineering', 'engineering_shifted', 'binary',
-          'binary_iec'] | None``
+          'scientific', 'engineering', 'engineering_shifted'] | None``
         :param exp_val: Indicates how the exponent value should be
           chosen. If an integer is specified, the value must be 0 for
           fixed point and percent modes, an integer multiple of 3 for
-          engineering and engineering shifted modes, and an integer
-          multiple of 10 for binary IEC mode. Can be set to ``"auto"``.
+          engineering and engineering shifted modes. Can be set to
+          ``"auto"``.
         :type exp_val: ``int | Literal['auto'] | None``
         :param round_mode: Indicate how to round numbers during
           formatting.
@@ -231,11 +227,6 @@ def __init__(  # noqa: PLR0913
           values to si prefixes. Entries overwrite default values. A
           value of ``None`` means that exponent will not be converted.
         :type extra_si_prefixes: ``dict[int, Union[str, None]] | None``
-        :param extra_iec_prefixes: Dictionary mapping additional
-          exponent values to iec prefixes. Entries overwrite default
-          values. A value of ``None`` means that exponent will not be
-          converted.
-        :type extra_iec_prefixes: ``dict[int, Union[str, None]] | None``
         :param extra_parts_per_forms: Dictionary mapping additional
           exponent values to "parts-per" forms. Entries overwrite
           default values. A value of ``None`` means that exponent will
@@ -297,7 +288,6 @@ def __init__(  # noqa: PLR0913
             left_pad_dec_place=left_pad_dec_place,
             exp_format=exp_format,
             extra_si_prefixes=extra_si_prefixes,
-            extra_iec_prefixes=extra_iec_prefixes,
             extra_parts_per_forms=extra_parts_per_forms,
             capitalize=capitalize,
             superscript=superscript,
diff --git a/src/sciform/api/global_configuration.py b/src/sciform/api/global_configuration.py
index c8f0ed2f..bb6d7496 100644
--- a/src/sciform/api/global_configuration.py
+++ b/src/sciform/api/global_configuration.py
@@ -38,7 +38,6 @@ def set_global_options(  # noqa: PLR0913
     left_pad_dec_place: int | None = None,
     exp_format: option_types.ExpFormat | None = None,
     extra_si_prefixes: dict[int, str] | None = None,
-    extra_iec_prefixes: dict[int, str] | None = None,
     extra_parts_per_forms: dict[int, str] | None = None,
     capitalize: bool | None = None,
     superscript: bool | None = None,
@@ -69,7 +68,6 @@ def set_global_options(  # noqa: PLR0913
         left_pad_dec_place=left_pad_dec_place,
         exp_format=exp_format,
         extra_si_prefixes=extra_si_prefixes,
-        extra_iec_prefixes=extra_iec_prefixes,
         extra_parts_per_forms=extra_parts_per_forms,
         capitalize=capitalize,
         superscript=superscript,
@@ -119,7 +117,6 @@ def __init__(  # noqa: PLR0913
         left_pad_dec_place: int | None = None,
         exp_format: option_types.ExpFormat | None = None,
         extra_si_prefixes: dict[int, str] | None = None,
-        extra_iec_prefixes: dict[int, str] | None = None,
         extra_parts_per_forms: dict[int, str] | None = None,
         capitalize: bool | None = None,
         superscript: bool | None = None,
@@ -145,7 +142,6 @@ def __init__(  # noqa: PLR0913
             left_pad_dec_place=left_pad_dec_place,
             exp_format=exp_format,
             extra_si_prefixes=extra_si_prefixes,
-            extra_iec_prefixes=extra_iec_prefixes,
             extra_parts_per_forms=extra_parts_per_forms,
             capitalize=capitalize,
             superscript=superscript,
diff --git a/src/sciform/format_utils/exp_translations.py b/src/sciform/format_utils/exp_translations.py
index 728d3846..bd8d13fc 100644
--- a/src/sciform/format_utils/exp_translations.py
+++ b/src/sciform/format_utils/exp_translations.py
@@ -24,18 +24,6 @@
     -30: "q",
 }
 
-val_to_iec_dict = {
-    0: "",
-    10: "Ki",
-    20: "Mi",
-    30: "Gi",
-    40: "Ti",
-    50: "Pi",
-    60: "Ei",
-    70: "Zi",
-    80: "Yi",
-}
-
 val_to_parts_per_dict = {
     0: "",
     -6: "ppm",
diff --git a/src/sciform/format_utils/exponents.py b/src/sciform/format_utils/exponents.py
index 07164c98..1fb40d25 100644
--- a/src/sciform/format_utils/exponents.py
+++ b/src/sciform/format_utils/exponents.py
@@ -2,15 +2,14 @@
 
 from __future__ import annotations
 
-from typing import TYPE_CHECKING, Literal, cast
+from typing import TYPE_CHECKING
 
 from sciform.format_utils.exp_translations import (
-    val_to_iec_dict,
     val_to_parts_per_dict,
     val_to_si_dict,
 )
 from sciform.format_utils.numbers import (
-    get_mantissa_exp_base,
+    get_mantissa_exp,
 )
 from sciform.options.option_types import (
     ExpFormatEnum,
@@ -24,22 +23,13 @@
 
 def get_translation_dict(
     exp_format: ExpFormatEnum,
-    base: Literal[10, 2],
     extra_si_prefixes: dict[int, str],
-    extra_iec_prefixes: dict[int, str],
     extra_parts_per_forms: dict[int, str],
 ) -> dict[int, str]:
     """Resolve dictionary of prefix translations."""
     if exp_format is ExpFormatEnum.PREFIX:
-        if base == 10:
-            translation_dict = val_to_si_dict.copy()
-            translation_dict.update(extra_si_prefixes)
-        elif base == 2:
-            translation_dict = val_to_iec_dict.copy()
-            translation_dict.update(extra_iec_prefixes)
-        else:
-            msg = f"Unhandled base {base}"
-            raise ValueError(msg)
+        translation_dict = val_to_si_dict.copy()
+        translation_dict.update(extra_si_prefixes)
     elif exp_format is ExpFormatEnum.PARTS_PER:
         translation_dict = val_to_parts_per_dict.copy()
         translation_dict.update(extra_parts_per_forms)
@@ -50,24 +40,21 @@ def get_translation_dict(
     return translation_dict
 
 
-base_exp_symbol_dict = {10: "e", 2: "b"}
-
-
-def get_standard_exp_str(base: int, exp_val: int, *, capitalize: bool = False) -> str:
+def get_standard_exp_str(exp_val: int, *, capitalize: bool = False) -> str:
     """Get standard (eg. 'e+02') exponent string."""
-    exp_symbol = base_exp_symbol_dict[base]
+    base_symbol = "e"
     if capitalize:
-        exp_symbol = exp_symbol.capitalize()
-    return f"{exp_symbol}{exp_val:+03d}"
+        base_symbol = base_symbol.capitalize()
+    return f"{base_symbol}{exp_val:+03d}"
 
 
 superscript_translate = str.maketrans("+-0123456789", "⁺⁻⁰¹²³⁴⁵⁶⁷⁸⁹")
 
 
-def get_superscript_exp_str(base: int, exp_val: int) -> str:
+def get_superscript_exp_str(exp_val: int) -> str:
     """Get superscript (e.g. '×10⁺²') exponent string."""
     exp_val_str = f"{exp_val}".translate(superscript_translate)
-    return f"×{base}{exp_val_str}"
+    return f"×10{exp_val_str}"
 
 
 def get_exp_str(  # noqa: PLR0913
@@ -76,7 +63,6 @@ def get_exp_str(  # noqa: PLR0913
     exp_mode: ExpModeEnum,
     exp_format: ExpFormatEnum,
     extra_si_prefixes: dict[int, str],
-    extra_iec_prefixes: dict[int, str],
     extra_parts_per_forms: dict[int, str],
     capitalize: bool,
     superscript: bool,
@@ -87,18 +73,10 @@ def get_exp_str(  # noqa: PLR0913
     if exp_mode is ExpModeEnum.PERCENT:
         return "%"
 
-    if exp_mode is ExpModeEnum.BINARY or exp_mode is ExpModeEnum.BINARY_IEC:
-        base = 2
-    else:
-        base = 10
-    base = cast(Literal[10, 2], base)
-
     if exp_format is ExpFormatEnum.PREFIX or exp_format is ExpFormatEnum.PARTS_PER:
         translation_dict = get_translation_dict(
             exp_format,
-            base,
             extra_si_prefixes,
-            extra_iec_prefixes,
             extra_parts_per_forms,
         )
         if (
@@ -110,9 +88,9 @@ def get_exp_str(  # noqa: PLR0913
             return exp_str
 
     if superscript:
-        return get_superscript_exp_str(base, exp_val)
+        return get_superscript_exp_str(exp_val)
 
-    return get_standard_exp_str(base, exp_val, capitalize=capitalize)
+    return get_standard_exp_str(exp_val, capitalize=capitalize)
 
 
 def get_val_unc_exp(
@@ -132,7 +110,7 @@ def get_val_unc_exp(
     else:
         exp_driver_val = unc
 
-    _, exp_val, _ = get_mantissa_exp_base(
+    _, exp_val = get_mantissa_exp(
         exp_driver_val,
         exp_mode=exp_mode,
         input_exp=input_exp,
diff --git a/src/sciform/format_utils/numbers.py b/src/sciform/format_utils/numbers.py
index 9cd6d0e0..f581e07b 100644
--- a/src/sciform/format_utils/numbers.py
+++ b/src/sciform/format_utils/numbers.py
@@ -1,10 +1,9 @@
-"""Utilities for parsing mantissa, base, and exp."""
+"""Utilities for parsing mantissa, and exp."""
 
 from __future__ import annotations
 
 import re
 from decimal import Decimal
-from math import floor, log2
 from typing import Literal
 
 from sciform.formatting.parser import (
@@ -26,13 +25,6 @@ def get_top_dec_place(num: Decimal) -> int:
     return len(digits) + exp - 1
 
 
-def get_top_dec_place_binary(num: Decimal) -> int:
-    """Get the decimal place of a decimal's most significant digit."""
-    if not num.is_finite() or num == 0:
-        return 0
-    return floor(log2(abs(num)))
-
-
 def get_bottom_dec_place(num: Decimal) -> int:
     """Get the decimal place of a decimal's least significant digit."""
     if not num.is_finite():
@@ -102,39 +94,12 @@ def get_engineering_exp(
     return exp_val
 
 
-def get_binary_exp(
-    num: Decimal,
-    input_exp: int | ExpValEnum,
-    *,
-    iec: bool = False,
-) -> int:
-    """Get the exponent for binary formatting modes."""
-    if input_exp is ExpValEnum.AUTO:
-        exp_val = get_top_dec_place_binary(num)
-        if iec:
-            exp_val = (exp_val // 10) * 10
-    else:
-        if iec and input_exp % 10 != 0:
-            msg = (
-                f"Exponent must be an integer multiple of 10 in binary IEC mode, not "
-                f"{input_exp}."
-            )
-            raise ValueError(msg)
-        exp_val = input_exp
-    return exp_val
-
-
-def get_mantissa_exp_base(
+def get_mantissa_exp(
     num: Decimal,
     exp_mode: ExpModeEnum,
     input_exp: int | ExpValEnum,
-) -> tuple[Decimal, int, int]:
-    """Get mantissa, exponent, and base for formatting a decimal number."""
-    if exp_mode is ExpModeEnum.BINARY or exp_mode is ExpModeEnum.BINARY_IEC:
-        base = 2
-    else:
-        base = 10
-
+) -> tuple[Decimal, int]:
+    """Get mantissa and exponent for formatting a decimal number."""
     if num == 0 or not num.is_finite():
         mantissa = Decimal(num)
         exp = 0 if input_exp is ExpValEnum.AUTO else input_exp
@@ -147,16 +112,12 @@ def get_mantissa_exp_base(
             exp = get_engineering_exp(num, input_exp)
         elif exp_mode is ExpModeEnum.ENGINEERING_SHIFTED:
             exp = get_engineering_exp(num, input_exp, shifted=True)
-        elif exp_mode is ExpModeEnum.BINARY:
-            exp = get_binary_exp(num, input_exp)
-        elif exp_mode is ExpModeEnum.BINARY_IEC:
-            exp = get_binary_exp(num, input_exp, iec=True)
         else:
             msg = f"Unhandled exponent mode {exp_mode}."
             raise ValueError(msg)
-        mantissa = num * Decimal(base) ** Decimal(-exp)
+        mantissa = num * Decimal(10) ** Decimal(-exp)
     mantissa = mantissa.normalize()
-    return mantissa, exp, base
+    return mantissa, exp
 
 
 # language=pythonverboseregexp  noqa: ERA001
diff --git a/src/sciform/formatting/fsml.py b/src/sciform/formatting/fsml.py
index 38b49556..e8c9ebef 100644
--- a/src/sciform/formatting/fsml.py
+++ b/src/sciform/formatting/fsml.py
@@ -18,7 +18,7 @@
                            |
                            (?P<round_mode_special>[AP])
                          )?
-                         (?P<exp_mode>[fF%eErRbB])?
+                         (?P<exp_mode>[fF%eErR])?
                          (?:x(?P<exp_val>[+-]?\d+))?
                          (?P<prefix_mode>p)?
                          (?P<paren_uncertainty>\(\))?
@@ -46,11 +46,6 @@ def parse_exp_mode(
                 exp_mode = "engineering_shifted"
             else:
                 exp_mode = "engineering"
-        elif exp_mode in ["b", "B"]:
-            if alternate_mode:
-                exp_mode = "binary_iec"
-            else:
-                exp_mode = "binary"
     else:
         capitalize = None
     return exp_mode, capitalize
diff --git a/src/sciform/formatting/number_formatting.py b/src/sciform/formatting/number_formatting.py
index 3771fccb..1792f3ad 100644
--- a/src/sciform/formatting/number_formatting.py
+++ b/src/sciform/formatting/number_formatting.py
@@ -16,7 +16,7 @@
     get_sign_str,
 )
 from sciform.format_utils.numbers import (
-    get_mantissa_exp_base,
+    get_mantissa_exp,
     get_val_unc_top_dec_place,
     parse_mantissa_from_ascii_exp_str,
 )
@@ -88,7 +88,6 @@ def format_non_finite(num: Decimal, options: FinalizedOptions) -> str:
             capitalize=options.capitalize,
             superscript=options.superscript,
             extra_si_prefixes=options.extra_si_prefixes,
-            extra_iec_prefixes=options.extra_iec_prefixes,
             extra_parts_per_forms=options.extra_parts_per_forms,
         )
     else:
@@ -120,7 +119,7 @@ def format_num(num: Decimal, options: FinalizedOptions) -> str:
     round_mode = options.round_mode
     exp_mode = options.exp_mode
     ndigits = options.ndigits
-    mantissa, temp_exp_val, base = get_mantissa_exp_base(num, exp_mode, exp_val)
+    mantissa, temp_exp_val = get_mantissa_exp(num, exp_mode, exp_val)
     round_digit = get_round_dec_place(mantissa, round_mode, ndigits)
     mantissa_rounded = round(mantissa, -round_digit)
 
@@ -128,8 +127,8 @@ def format_num(num: Decimal, options: FinalizedOptions) -> str:
     Repeat mantissa + exponent discovery after rounding in case rounding
     altered the required exponent.
     """
-    rounded_num = mantissa_rounded * Decimal(base) ** Decimal(temp_exp_val)
-    mantissa, exp_val, base = get_mantissa_exp_base(rounded_num, exp_mode, exp_val)
+    rounded_num = mantissa_rounded * Decimal(10) ** Decimal(temp_exp_val)
+    mantissa, exp_val = get_mantissa_exp(rounded_num, exp_mode, exp_val)
     round_digit = get_round_dec_place(mantissa, round_mode, ndigits)
     mantissa_rounded = round(mantissa, -int(round_digit))
     mantissa_rounded = cast(Decimal, mantissa_rounded)
@@ -170,7 +169,6 @@ def format_num(num: Decimal, options: FinalizedOptions) -> str:
         capitalize=options.capitalize,
         superscript=options.superscript,
         extra_si_prefixes=options.extra_si_prefixes,
-        extra_iec_prefixes=options.extra_iec_prefixes,
         extra_parts_per_forms=options.extra_parts_per_forms,
     )
 
@@ -179,16 +177,10 @@ def format_num(num: Decimal, options: FinalizedOptions) -> str:
     return result
 
 
-def format_val_unc(val: Decimal, unc: Decimal, options: FinalizedOptions) -> str:  # noqa: PLR0915
+def format_val_unc(val: Decimal, unc: Decimal, options: FinalizedOptions) -> str:
     """Format value/uncertainty pair according to input options."""
     exp_mode = options.exp_mode
 
-    if exp_mode is ExpModeEnum.BINARY or exp_mode is ExpModeEnum.BINARY_IEC:
-        msg = (
-            "Binary exponent modes are not supported for value/uncertainty formatting."
-        )
-        raise NotImplementedError(msg)
-
     unc = abs(unc)
     if exp_mode is ExpModeEnum.PERCENT:
         val *= 100
@@ -269,12 +261,12 @@ def format_val_unc(val: Decimal, unc: Decimal, options: FinalizedOptions) -> str
         """
         ndigits = -round_digit + exp_val
 
-    val_mantissa, _, _ = get_mantissa_exp_base(
+    val_mantissa, _ = get_mantissa_exp(
         val_rounded,
         exp_mode=exp_mode,
         input_exp=exp_val,
     )
-    unc_mantissa, _, _ = get_mantissa_exp_base(
+    unc_mantissa, _ = get_mantissa_exp(
         unc_rounded,
         exp_mode=exp_mode,
         input_exp=exp_val,
@@ -337,7 +329,6 @@ def format_val_unc(val: Decimal, unc: Decimal, options: FinalizedOptions) -> str
             exp_mode=exp_mode,
             exp_format=options.exp_format,
             extra_si_prefixes=options.extra_si_prefixes,
-            extra_iec_prefixes=options.extra_iec_prefixes,
             extra_parts_per_forms=options.extra_parts_per_forms,
             capitalize=options.capitalize,
             superscript=options.superscript,
diff --git a/src/sciform/formatting/output_conversion.py b/src/sciform/formatting/output_conversion.py
index a7ee1420..f924993d 100644
--- a/src/sciform/formatting/output_conversion.py
+++ b/src/sciform/formatting/output_conversion.py
@@ -6,12 +6,11 @@
 from typing import Literal, get_args
 
 ascii_exp_pattern = re.compile(
-    r"^(?P<mantissa>.*)(?P<ascii_base>[eEbB])(?P<exp>[+-]\d+)$",
+    r"^(?P<mantissa>.*)(?P<ascii_base>[eE])(?P<exp>[+-]\d+)$",
 )
-ascii_base_dict = {"e": 10, "E": 10, "b": 2, "B": 2}
 
 unicode_exp_pattern = re.compile(
-    r"^(?P<mantissa>.*)×(?P<base>10|2)(?P<super_exp>[⁺⁻]?[⁰¹²³⁴⁵⁶⁷⁸⁹]+)$",
+    r"^(?P<mantissa>.*)×10(?P<super_exp>[⁺⁻]?[⁰¹²³⁴⁵⁶⁷⁸⁹]+)$",
 )
 superscript_translation = str.maketrans("⁺⁻⁰¹²³⁴⁵⁶⁷⁸⁹", "+-0123456789")
 
@@ -19,24 +18,17 @@
 
 
 def _make_exp_str(
-    base: int,
     exp: int,
     output_format: output_formats,
     *,
     capitalize: bool = False,
 ) -> str:
     if output_format == "latex":
-        return rf"\times{base}^{{{exp}}}"
+        return rf"\times10^{{{exp}}}"
     if output_format == "html":
-        return f"×{base}<sup>{exp}</sup>"
+        return f"×10<sup>{exp}</sup>"
     if output_format == "ascii":
-        if base == 10:
-            exp_str = f"e{exp:+03d}"
-        elif base == 2:
-            exp_str = f"b{exp:+03d}"
-        else:
-            msg = f"base must be 10 or 2, not {base}"
-            raise ValueError(msg)
+        exp_str = f"e{exp:+03d}"
         if capitalize:
             exp_str = exp_str.upper()
         return exp_str
@@ -116,10 +108,8 @@ def convert_sciform_format(
     if match := re.match(ascii_exp_pattern, formatted_str):
         mantissa = match.group("mantissa")
         ascii_base = match.group("ascii_base")
-        base = ascii_base_dict[ascii_base]
         exp = int(match.group("exp"))
         exp_str = _make_exp_str(
-            base,
             exp,
             output_format,
             capitalize=ascii_base.isupper(),
@@ -128,10 +118,9 @@ def convert_sciform_format(
         suffix_str = exp_str
     elif match := re.match(unicode_exp_pattern, formatted_str):
         mantissa = match.group("mantissa")
-        base = int(match.group("base"))
         super_exp = match.group("super_exp")
         exp = int(super_exp.translate(superscript_translation))
-        exp_str = _make_exp_str(base, exp, output_format)
+        exp_str = _make_exp_str(exp, output_format)
         main_str = mantissa
         suffix_str = exp_str
     else:
diff --git a/src/sciform/formatting/parser.py b/src/sciform/formatting/parser.py
index a6448241..39b1c45c 100644
--- a/src/sciform/formatting/parser.py
+++ b/src/sciform/formatting/parser.py
@@ -51,9 +51,9 @@
 """
 
 # language=pythonverboseregexp
-ascii_exp_pattern = r"(?P<ascii_exp>(?P<ascii_base>[eEbB])(?P<ascii_exp_val>[+-]\d+))"
+ascii_exp_pattern = r"(?P<ascii_exp>(?P<ascii_base>[eE])(?P<ascii_exp_val>[+-]\d+))"
 # language=pythonverboseregexp
-uni_exp_pattern = r"(?P<uni_exp>×(?P<uni_base>10|2)(?P<uni_exp_val>[⁺⁻]?[⁰¹²³⁴⁵⁶⁷⁸⁹]+))"
+uni_exp_pattern = r"(?P<uni_exp>×10(?P<uni_exp_val>[⁺⁻]?[⁰¹²³⁴⁵⁶⁷⁸⁹]+))"
 # language=pythonverboseregexp
 prefix_exp_pattern = r"(\ (?P<prefix_exp>[a-zA-zμ]+))"
 # language=pythonverboseregexp
@@ -88,79 +88,58 @@
 superscript_translation = str.maketrans("⁺⁻⁰¹²³⁴⁵⁶⁷⁸⁹", "+-0123456789")
 
 
-def _get_ascii_base_exp_val(match: re.Match) -> tuple[int, int]:
-    base = match.group("ascii_base")
-    if base.lower() == "e":
-        base = 10
-    elif base.lower() == "b":
-        base = 2
-    else:  # pragma: no cover
-        msg = f'Unexpected ASCII base: "{base}"'
-        raise ValueError(msg)
-    exp_val = int(match.group("ascii_exp_val"))
-    return base, exp_val
+def _get_ascii_exp_val(match: re.Match) -> int:
+    return int(match.group("ascii_exp_val"))
 
 
-def _get_unicode_base_exp_val(match: re.Match) -> tuple[int, int]:
-    base = int(match.group("uni_base"))
-    exp_val = int(match.group("uni_exp_val").translate(superscript_translation))
-    return base, exp_val
+def _get_unicode_exp_val(match: re.Match) -> int:
+    return int(match.group("uni_exp_val").translate(superscript_translation))
 
 
-def _get_prefix_base_exp_val(prefix_exp: str) -> tuple[int, int]:
-    candidate_base_exp_val_pairs = []
+def _get_prefix_exp_val(prefix_exp: str) -> int:
+    candidate_exp_vals = []
     global_options = global_options_module.GLOBAL_DEFAULT_OPTIONS
 
     si_translations = exp_translations.val_to_si_dict.copy()
     si_translations.update(global_options.extra_si_prefixes)
     for key, value in si_translations.items():
         if prefix_exp == value:
-            candidate_base_exp_val_pairs.append((10, key))
+            candidate_exp_vals.append(key)
 
     pp_translations = exp_translations.val_to_parts_per_dict.copy()
     pp_translations.update(global_options.extra_parts_per_forms)
     for key, value in pp_translations.items():
         if prefix_exp == value:
-            candidate_base_exp_val_pairs.append((10, key))
-
-    iec_translations = exp_translations.val_to_iec_dict.copy()
-    iec_translations.update(global_options.extra_iec_prefixes)
-    for key, value in iec_translations.items():
-        if prefix_exp == value:
-            candidate_base_exp_val_pairs.append((2, key))
+            candidate_exp_vals.append(key)
 
-    if len(candidate_base_exp_val_pairs) == 0:
+    if len(candidate_exp_vals) == 0:
         msg = f'Unrecognized prefix: "{prefix_exp}". Unable to parse input.'
         raise ValueError(msg)
-    if len(set(candidate_base_exp_val_pairs)) > 1:
-        candidate_exps = [
-            candidate_pair[1] for candidate_pair in candidate_base_exp_val_pairs
-        ]
+    if len(set(candidate_exp_vals)) > 1:
         msg = (
-            f'Multiple translations found for "{prefix_exp}": {candidate_exps}. '
+            f'Multiple translations found for "{prefix_exp}": {candidate_exp_vals}. '
             f"Unable to parse input."
         )
         raise ValueError(msg)
-    base, exp_val = candidate_base_exp_val_pairs[0]
-    return base, exp_val
+    exp_val = candidate_exp_vals[0]
+    return exp_val
 
 
-def _extract_exp_base_exp_val(
+def _extract_exp_val(
     match: re.Match,
 ) -> tuple[int, int]:
     if match.group("ascii_exp"):
-        base, exp_val = _get_ascii_base_exp_val(match)
+        exp_val = _get_ascii_exp_val(match)
     elif match.group("uni_exp"):
-        base, exp_val = _get_unicode_base_exp_val(match)
+        exp_val = _get_unicode_exp_val(match)
     elif prefix_exp := match.group("prefix_exp"):
-        base, exp_val = _get_prefix_base_exp_val(prefix_exp)
+        exp_val = _get_prefix_exp_val(prefix_exp)
     elif match.group("percent_exp"):
-        base = 10
         exp_val = -2
     else:  # pragma: no cover
         msg = "Expected named match groups not found."
         raise ValueError(msg)
-    return base, exp_val
+    return exp_val
 
 
 def _infer_decimal_separator(
@@ -252,54 +231,52 @@ def _normalize_separators(
     return input_str
 
 
-def _parse_no_exp_pattern(match: re.Match) -> tuple[str, str | None, int, int]:
+def _parse_no_exp_pattern(match: re.Match) -> tuple[str, str | None, int]:
     if val := match.group("non_finite_val"):
         unc = None
     else:
         val = match.group("pm_val")
         unc = match.group("pm_unc")
-    base = 10
     exp_val = 0
-    return val, unc, base, exp_val
+    return val, unc, exp_val
 
 
-def _parse_optional_exp_pattern(match: re.Match) -> tuple[str, str | None, int, int]:
+def _parse_optional_exp_pattern(match: re.Match) -> tuple[str, str | None, int]:
     if match.group("exp"):
-        base, exp_val = _extract_exp_base_exp_val(match)
+        exp_val = _extract_exp_val(match)
     else:
-        base = 10
         exp_val = 0
     if val := match.group("val"):
         unc = None
     else:
         val = match.group("paren_val")
         unc = match.group("paren_unc")
-    return val, unc, base, exp_val
+    return val, unc, exp_val
 
 
-def _parse_always_exp_pattern(match: re.Match) -> tuple[str, str | None, int, int]:
-    base, exp_val = _extract_exp_base_exp_val(match)
+def _parse_always_exp_pattern(match: re.Match) -> tuple[str, str | None, int]:
+    exp_val = _extract_exp_val(match)
     if val := match.group("non_finite_val"):
         unc = None
     else:
         val = match.group("pm_val")
         unc = match.group("pm_unc")
-    return val, unc, base, exp_val
+    return val, unc, exp_val
 
 
-def _extract_val_unc_base_exp(
+def _extract_val_unc_exp(
     input_str: str,
-) -> tuple[str, str | None, int, int]:
+) -> tuple[str, str | None, int]:
     if match := re.fullmatch(no_exp_pattern, input_str, re.VERBOSE):
-        val, unc, base, exp_val = _parse_no_exp_pattern(match)
+        val, unc, exp_val = _parse_no_exp_pattern(match)
     elif match := re.fullmatch(optional_exp_pattern, input_str, re.VERBOSE):
-        val, unc, base, exp_val = _parse_optional_exp_pattern(match)
+        val, unc, exp_val = _parse_optional_exp_pattern(match)
     elif match := re.fullmatch(always_exp_pattern, input_str, re.VERBOSE):
-        val, unc, base, exp_val = _parse_always_exp_pattern(match)
+        val, unc, exp_val = _parse_always_exp_pattern(match)
     else:
         msg = f'Input string "{input_str}" does not match any expected input format.'
         raise ValueError(msg)
-    return val, unc, base, exp_val
+    return val, unc, exp_val
 
 
 def parse_val_unc_from_str(
@@ -319,8 +296,8 @@ def parse_val_unc_from_str(
         (INF)e+00, or "(123.000 ± 0.456)e+01"
 
     Whichever pattern is matched is then parsed to extract the value,
-    uncertainty, and exponent base and value (if no exponent information
-    is available then base is set to 10 and value is set to 0).
+    uncertainty, and exponent value (if no exponent information
+    is available then the exponent value is set to 0).
 
     Next, grouping separators such as "_" or " " are stripped from the
     value and uncertainty strings. An algorithm is then run to detect
@@ -339,7 +316,7 @@ def parse_val_unc_from_str(
     Finally, the value and uncertainty strings are converted to decimals
     and multiplied by the extracted exponents.
     """
-    val, unc, base, exp_val = _extract_val_unc_base_exp(input_str)
+    val, unc, exp_val = _extract_val_unc_exp(input_str)
 
     decimal_separator = _parse_decimal_separator(val, unc, decimal_separator)
 
@@ -372,16 +349,15 @@ def parse_val_unc_from_str(
             raise ValueError(msg)
         unc = "0." + "0" * num_missing_zeros + unc
 
-    base = Decimal(base)
     exp_val = Decimal(exp_val)
     val = Decimal(val)
     if val.is_finite():
-        val *= base**exp_val
+        val *= 10**exp_val
 
     if unc is not None:
         unc = Decimal(unc)
         if unc.is_finite():
-            unc *= base**exp_val
+            unc *= 10**exp_val
 
     return val, unc
 
diff --git a/src/sciform/options/finalized_options.py b/src/sciform/options/finalized_options.py
index c109a025..c6cdfe81 100644
--- a/src/sciform/options/finalized_options.py
+++ b/src/sciform/options/finalized_options.py
@@ -30,7 +30,6 @@ class FinalizedOptions:
     left_pad_dec_place: int
     exp_format: option_types.ExpFormatEnum
     extra_si_prefixes: dict[int, str]
-    extra_iec_prefixes: dict[int, str]
     extra_parts_per_forms: dict[int, str]
     capitalize: bool
     superscript: bool
diff --git a/src/sciform/options/global_options.py b/src/sciform/options/global_options.py
index ee923e03..4f4a200c 100644
--- a/src/sciform/options/global_options.py
+++ b/src/sciform/options/global_options.py
@@ -15,7 +15,6 @@
     left_pad_dec_place=0,
     exp_format="standard",
     extra_si_prefixes={},
-    extra_iec_prefixes={},
     extra_parts_per_forms={},
     capitalize=False,
     superscript=False,
diff --git a/src/sciform/options/input_options.py b/src/sciform/options/input_options.py
index c63c763f..2a4260fc 100644
--- a/src/sciform/options/input_options.py
+++ b/src/sciform/options/input_options.py
@@ -62,7 +62,6 @@ class InputOptions:
     left_pad_dec_place: int | None = None
     exp_format: option_types.ExpFormat | None = None
     extra_si_prefixes: dict[int, str] | None = None
-    extra_iec_prefixes: dict[int, str] | None = None
     extra_parts_per_forms: dict[int, str] | None = None
     capitalize: bool | None = None
     superscript: bool | None = None
diff --git a/src/sciform/options/option_types.py b/src/sciform/options/option_types.py
index c0463633..8c441f9e 100644
--- a/src/sciform/options/option_types.py
+++ b/src/sciform/options/option_types.py
@@ -74,8 +74,6 @@ class RoundModeEnum(str, Enum):
     "scientific",
     "engineering",
     "engineering_shifted",
-    "binary",
-    "binary_iec",
 ]
 
 
@@ -87,8 +85,6 @@ class ExpModeEnum(str, Enum):
     SCIENTIFIC = "scientific"
     ENGINEERING = "engineering"
     ENGINEERING_SHIFTED = "engineering_shifted"
-    BINARY = "binary"
-    BINARY_IEC = "binary_iec"
 
 
 ExpFormat = Literal["standard", "prefix", "parts_per"]
diff --git a/src/sciform/options/populated_options.py b/src/sciform/options/populated_options.py
index b067461a..a4047a86 100644
--- a/src/sciform/options/populated_options.py
+++ b/src/sciform/options/populated_options.py
@@ -55,7 +55,6 @@ class PopulatedOptions:
      'left_pad_dec_place': 0,
      'exp_format': 'standard',
      'extra_si_prefixes': {},
-     'extra_iec_prefixes': {},
      'extra_parts_per_forms': {},
      'capitalize': False,
      'superscript': True,
@@ -66,7 +65,7 @@ class PopulatedOptions:
      'pm_whitespace': True,
     )
     >>> print(formatter.populated_options.as_dict())
-    {'exp_mode': 'engineering', 'exp_val': 'auto', 'round_mode': 'sig_fig', 'ndigits': 2, 'upper_separator': '', 'decimal_separator': '.', 'lower_separator': '', 'sign_mode': '-', 'left_pad_char': ' ', 'left_pad_dec_place': 0, 'exp_format': 'standard', 'extra_si_prefixes': {}, 'extra_iec_prefixes': {}, 'extra_parts_per_forms': {}, 'capitalize': False, 'superscript': True, 'nan_inf_exp': False, 'paren_uncertainty': False, 'left_pad_matching': False, 'paren_uncertainty_trim': True, 'pm_whitespace': True}
+    {'exp_mode': 'engineering', 'exp_val': 'auto', 'round_mode': 'sig_fig', 'ndigits': 2, 'upper_separator': '', 'decimal_separator': '.', 'lower_separator': '', 'sign_mode': '-', 'left_pad_char': ' ', 'left_pad_dec_place': 0, 'exp_format': 'standard', 'extra_si_prefixes': {}, 'extra_parts_per_forms': {}, 'capitalize': False, 'superscript': True, 'nan_inf_exp': False, 'paren_uncertainty': False, 'left_pad_matching': False, 'paren_uncertainty_trim': True, 'pm_whitespace': True}
 
     Note that :class:`PopulatedOptions` lacks the ``add_c_prefix``,
     ``add_small_si_prefixes`` and ``add_ppth_form`` options present
@@ -103,7 +102,6 @@ class PopulatedOptions:
     left_pad_dec_place: int
     exp_format: option_types.ExpFormat
     extra_si_prefixes: dict[int, str]
-    extra_iec_prefixes: dict[int, str]
     extra_parts_per_forms: dict[int, str]
     capitalize: bool
     superscript: bool
diff --git a/src/sciform/options/validation.py b/src/sciform/options/validation.py
index d96bf098..37d7d1c9 100644
--- a/src/sciform/options/validation.py
+++ b/src/sciform/options/validation.py
@@ -89,12 +89,6 @@ def validate_exp_val(
                     f"for engineering exponent modes."
                 )
                 raise ValueError(msg)
-            if options.exp_mode == "binary_iec" and options.exp_val % 10 != 0:
-                msg = (
-                    f"Exponent must be a multiple of 10, not "
-                    f"exp_val={options.exp_val}, for binary IEC exponent mode."
-                )
-                raise ValueError(msg)
 
 
 def validate_exp_options(
@@ -188,7 +182,6 @@ def validate_extra_translations(
     """Validate translation dictionary have int keys and alphabetic values."""
     translations_dicts = [
         options.extra_si_prefixes,
-        options.extra_iec_prefixes,
         options.extra_parts_per_forms,
     ]
 


Test patch:
diff --git a/tests/feature/test_global_config.py b/tests/feature/test_global_config.py
index eec925b6..fda982c5 100644
--- a/tests/feature/test_global_config.py
+++ b/tests/feature/test_global_config.py
@@ -54,14 +54,6 @@ def test_small_si_prefixes(self):
                 num_str = f"{num:ex{exp:+}p}"
                 self.assertEqual(num_str, expected_num_str)
 
-    def test_iec_prefix(self):
-        num = SciNum(1024)
-        fmt_spec = "bp"
-        self.assertEqual(f"{num:{fmt_spec}}", "1 Ki")
-        with GlobalOptionsContext(extra_iec_prefixes={10: "KiB"}):
-            self.assertEqual(f"{num:{fmt_spec}}", "1 KiB")
-        self.assertEqual(f"{num:{fmt_spec}}", "1 Ki")
-
     def test_ppth_form(self):
         num = 0.0024
         formatter = Formatter(
diff --git a/tests/feature/test_options_printout.py b/tests/feature/test_options_printout.py
index 3b8ea8ee..f085e5e6 100644
--- a/tests/feature/test_options_printout.py
+++ b/tests/feature/test_options_printout.py
@@ -49,7 +49,6 @@ def test_formatter_populated_options(self):
             " 'left_pad_dec_place': 0,\n"
             " 'exp_format': 'standard',\n"
             " 'extra_si_prefixes': {-2: 'c'},\n"
-            " 'extra_iec_prefixes': {},\n"
             " 'extra_parts_per_forms': {},\n"
             " 'capitalize': False,\n"
             " 'superscript': False,\n"
@@ -78,7 +77,6 @@ def test_get_default_global_options(self):
             " 'left_pad_dec_place': 0,\n"
             " 'exp_format': 'standard',\n"
             " 'extra_si_prefixes': {},\n"
-            " 'extra_iec_prefixes': {},\n"
             " 'extra_parts_per_forms': {},\n"
             " 'capitalize': False,\n"
             " 'superscript': False,\n"
@@ -108,7 +106,6 @@ def test_get_global_options(self):
             " 'left_pad_dec_place': 3,\n"
             " 'exp_format': 'standard',\n"
             " 'extra_si_prefixes': {},\n"
-            " 'extra_iec_prefixes': {},\n"
             " 'extra_parts_per_forms': {},\n"
             " 'capitalize': True,\n"
             " 'superscript': False,\n"
diff --git a/tests/feature/test_output_conversion.py b/tests/feature/test_output_conversion.py
index f67e7440..f071b984 100644
--- a/tests/feature/test_output_conversion.py
+++ b/tests/feature/test_output_conversion.py
@@ -180,14 +180,6 @@ def test_direct_cases(self):
                     r"$123000\:\text{ppm}$",
                 ),
             ),
-            (
-                "0b+00",
-                (
-                    "0b+00",
-                    "0×2<sup>0</sup>",
-                    r"$0\times2^{0}$",
-                ),
-            ),
             (
                 "16.18033E+03",
                 (
@@ -323,20 +315,6 @@ def test_val_formatter_cases(self):
                     ),
                 ],
             ),
-            (
-                1024,
-                [
-                    (
-                        Formatter(exp_mode="binary", exp_val=8),
-                        (
-                            "4b+08",
-                            "4b+08",
-                            "4×2<sup>8</sup>",
-                            r"4\times2^{8}",
-                        ),
-                    ),
-                ],
-            ),
             (
                 float("nan"),
                 [
diff --git a/tests/feature/test_string_parser.py b/tests/feature/test_string_parser.py
index 35f30189..6fd6c618 100644
--- a/tests/feature/test_string_parser.py
+++ b/tests/feature/test_string_parser.py
@@ -75,18 +75,6 @@
         "7.89×10²",
         (7.89e2, None),
     ),
-    (
-        "1×2¹⁰",
-        (1024, None),
-    ),
-    (
-        "1b+10",
-        (1024, None),
-    ),
-    (
-        "0b+00",
-        (0, None),
-    ),
     (
         "1.618033e+04",
         (16180.33, None),
@@ -107,14 +95,6 @@
         "3.1415 Q",
         (3.1415e30, None),
     ),
-    (
-        "1 Ki",
-        (1024, None),
-    ),
-    (
-        "1 Pi",
-        (2**50, None),
-    ),
     (
         "123.456.789,987_654_321",
         ("123456789.987654321", None),
diff --git a/tests/feature/test_val_formatter.py b/tests/feature/test_val_formatter.py
index 7216880c..c46487b8 100644
--- a/tests/feature/test_val_formatter.py
+++ b/tests/feature/test_val_formatter.py
@@ -45,12 +45,6 @@ def test_superscript(self):
                     ),
                 ],
             ),
-            (
-                1024,
-                [
-                    (Formatter(exp_mode="binary", superscript=True), "1×2¹⁰"),
-                ],
-            ),
         ]
 
         self.run_val_formatter_cases(cases_list)
diff --git a/tests/feature/test_val_fsml.py b/tests/feature/test_val_fsml.py
index a8613e80..16986947 100644
--- a/tests/feature/test_val_fsml.py
+++ b/tests/feature/test_val_fsml.py
@@ -310,31 +310,6 @@ def test_engineering_shifted(self):
 
         self.run_val_fsml_cases(cases_list)
 
-    def test_binary(self):
-        cases_list = [
-            (
-                1024,
-                [
-                    ("b", "1b+10"),
-                    ("#b", "1b+10"),
-                ],
-            ),
-            (
-                float("nan"),
-                [
-                    ("b", "nan"),
-                ],
-            ),
-            (
-                0,
-                [
-                    ("b", "0b+00"),
-                ],
-            ),
-        ]
-
-        self.run_val_fsml_cases(cases_list)
-
     def test_exp(self):
         cases_list = [
             (
@@ -358,7 +333,6 @@ def test_exp(self):
                     ("rx+3", "0.123456e+03"),
                 ],
             ),
-            (512, [("bx+10", "0.5b+10")]),
         ]
 
         self.run_val_fsml_cases(cases_list)
@@ -477,8 +451,6 @@ def test_non_finite_with_exp(self):
                     ("", "nan"),
                     ("e", "(nan)e+00"),
                     ("E", "(NAN)E+00"),
-                    ("b", "(nan)b+00"),
-                    ("B", "(NAN)B+00"),
                 ],
             ),
             (
@@ -487,8 +459,6 @@ def test_non_finite_with_exp(self):
                     ("", "inf"),
                     ("e", "(inf)e+00"),
                     ("E", "(INF)E+00"),
-                    ("b", "(inf)b+00"),
-                    ("B", "(INF)B+00"),
                 ],
             ),
             (
@@ -497,8 +467,6 @@ def test_non_finite_with_exp(self):
                     ("", "-inf"),
                     ("e", "(-inf)e+00"),
                     ("E", "(-INF)E+00"),
-                    ("b", "(-inf)b+00"),
-                    ("B", "(-INF)B+00"),
                 ],
             ),
         ]
@@ -559,13 +527,6 @@ def test_capitalization(self):
                     ("R", "16.18033E+03"),
                 ],
             ),
-            (
-                1024,
-                [
-                    ("!3b", "1.00b+10"),
-                    ("!3B", "1.00B+10"),
-                ],
-            ),
         ]
 
         self.run_val_fsml_cases(cases_list)
@@ -651,15 +612,6 @@ def test_prefix(self):
             (3.1415e28, [("ep", "3.1415e+28")]),
             (3.1415e29, [("ep", "3.1415e+29")]),
             (3.1415e30, [("ep", "3.1415 Q")]),
-            (2**10, [("bp", "1 Ki")]),
-            (2**10, [("bp", "1 Ki")]),
-            (2**20, [("bp", "1 Mi")]),
-            (2**30, [("bp", "1 Gi")]),
-            (2**40, [("bp", "1 Ti")]),
-            (2**50, [("bp", "1 Pi")]),
-            (2**60, [("bp", "1 Ei")]),
-            (2**70, [("bp", "1 Zi")]),
-            (2**80, [("bp", "1 Yi")]),
         ]
 
         self.run_val_fsml_cases(cases_list)
diff --git a/tests/feature/test_val_unc_formatter.py b/tests/feature/test_val_unc_formatter.py
index cf7ca03b..945eae93 100644
--- a/tests/feature/test_val_unc_formatter.py
+++ b/tests/feature/test_val_unc_formatter.py
@@ -390,19 +390,6 @@ def test_pdg_invalid_unc(self):
 
         self.run_val_unc_formatter_cases(cases_list)
 
-    def test_binary_not_implemented(self):
-        formatter = Formatter(exp_mode="binary")
-        self.assertRaises(NotImplementedError, formatter, 1024, 32)
-
-    @unittest.expectedFailure
-    def test_binary(self):
-        """
-        This test should pass when binary value/uncertainty formatting
-        is implemented
-        """
-        formatter = Formatter(exp_mode="binary")
-        self.assertEqual(formatter(1024, 32), "(1.00000 ± 0.03125)b+10")
-
     def test_pdg_sig_figs(self):
         cases_list = [
             (
diff --git a/tests/unit/format_utils/test_exp_translations.py b/tests/unit/format_utils/test_exp_translations.py
index b7343984..c616e9da 100644
--- a/tests/unit/format_utils/test_exp_translations.py
+++ b/tests/unit/format_utils/test_exp_translations.py
@@ -19,8 +19,5 @@ def validate_translations_dict(self, translation_dict: dict[str, Any]) -> None:
     def test_si_prefixes(self):
         self.validate_translations_dict(exp_translations.val_to_si_dict)
 
-    def test_iec_prefixes(self):
-        self.validate_translations_dict(exp_translations.val_to_iec_dict)
-
     def test__prefixes(self):
         self.validate_translations_dict(exp_translations.val_to_parts_per_dict)
diff --git a/tests/unit/format_utils/test_exponent_utils.py b/tests/unit/format_utils/test_exponent_utils.py
index da327e03..8f945bd2 100644
--- a/tests/unit/format_utils/test_exponent_utils.py
+++ b/tests/unit/format_utils/test_exponent_utils.py
@@ -2,16 +2,14 @@
 
 import unittest
 from decimal import Decimal
-from typing import Any, Dict, Literal, Tuple, Union
+from typing import Any, Dict, Tuple, Union
 
 from sciform.format_utils import exp_translations, exponents
 from sciform.options.option_types import ExpFormatEnum, ExpModeEnum, ExpValEnum
 
-Base = Literal[10, 2]
 GetTranslationDictCase = Tuple[
     Tuple[
         ExpFormatEnum,
-        Base,
         Dict[int, str],
         Dict[int, str],
         Dict[int, str],
@@ -29,9 +27,7 @@ class TestExponentUtils(unittest.TestCase):
     def test_get_translation_dict_si(self):
         translation_dict = exponents.get_translation_dict(
             ExpFormatEnum.PREFIX,
-            10,
             extra_si_prefixes={-2: "c", -1: "d", +3: "km", -3: None},
-            extra_iec_prefixes={},
             extra_parts_per_forms={},
         )
         for key, value in exp_translations.val_to_si_dict.items():
@@ -48,9 +44,7 @@ def test_get_translation_dict_si(self):
     def test_get_translation_dict_parts_per(self):
         translation_dict = exponents.get_translation_dict(
             ExpFormatEnum.PARTS_PER,
-            10,
             extra_si_prefixes={},
-            extra_iec_prefixes={},
             extra_parts_per_forms={-3: "ppth", -4: "pptt", -9: None, -12: "ppb"},
         )
         for key, value in exp_translations.val_to_parts_per_dict.items():
@@ -63,92 +57,43 @@ def test_get_translation_dict_parts_per(self):
         self.assertEqual(None, translation_dict[-9])
         self.assertEqual("ppb", translation_dict[-12])
 
-    def test_get_translation_dict_iec(self):
-        translation_dict = exponents.get_translation_dict(
-            ExpFormatEnum.PREFIX,
-            2,
-            extra_si_prefixes={},
-            extra_iec_prefixes={10: "Kb", 20: "MiB", 30: None},
-            extra_parts_per_forms={},
-        )
-        for key, value in exp_translations.val_to_iec_dict.items():
-            self.assertIn(key, translation_dict)
-            if key not in (10, 20, 30):
-                self.assertEqual(value, translation_dict[key])
-        self.assertEqual("Kb", translation_dict[10])
-        self.assertEqual("MiB", translation_dict[20])
-        self.assertEqual(None, translation_dict[30])
-
-    def test_get_translation_dict_invalid_base(self):
-        self.assertRaises(
-            ValueError,
-            exponents.get_translation_dict,
-            ExpFormatEnum.PREFIX,
-            8,
-            {},
-            {},
-            {},
-        )
-
     def test_get_translation_dict_invalid_format(self):
         self.assertRaises(
             ValueError,
             exponents.get_translation_dict,
             "prefix",
-            10,
-            {},
             {},
             {},
         )
 
     def test_get_standard_exp_str(self):
         cases: list[GetStandardExpStrCase] = [
-            ((10, -111, False), "e-111"),
-            ((10, -15, False), "e-15"),
-            ((10, -2, False), "e-02"),
-            ((10, -1, False), "e-01"),
-            ((10, 0, False), "e+00"),
-            ((10, +1, False), "e+01"),
-            ((10, +2, False), "e+02"),
-            ((10, +15, False), "e+15"),
-            ((10, +111, False), "e+111"),
-            ((10, -111, True), "E-111"),
-            ((10, -15, True), "E-15"),
-            ((10, -2, True), "E-02"),
-            ((10, -1, True), "E-01"),
-            ((10, 0, True), "E+00"),
-            ((10, +1, True), "E+01"),
-            ((10, +2, True), "E+02"),
-            ((10, +15, True), "E+15"),
-            ((10, +111, True), "E+111"),
-            ((2, -111, False), "b-111"),
-            ((2, -15, False), "b-15"),
-            ((2, -2, False), "b-02"),
-            ((2, -1, False), "b-01"),
-            ((2, 0, False), "b+00"),
-            ((2, +1, False), "b+01"),
-            ((2, +2, False), "b+02"),
-            ((2, +15, False), "b+15"),
-            ((2, +111, False), "b+111"),
-            ((2, -111, True), "B-111"),
-            ((2, -15, True), "B-15"),
-            ((2, -2, True), "B-02"),
-            ((2, -1, True), "B-01"),
-            ((2, 0, True), "B+00"),
-            ((2, +1, True), "B+01"),
-            ((2, +2, True), "B+02"),
-            ((2, +15, True), "B+15"),
-            ((2, +111, True), "B+111"),
+            ((-111, False), "e-111"),
+            ((-15, False), "e-15"),
+            ((-2, False), "e-02"),
+            ((-1, False), "e-01"),
+            ((0, False), "e+00"),
+            ((+1, False), "e+01"),
+            ((+2, False), "e+02"),
+            ((+15, False), "e+15"),
+            ((+111, False), "e+111"),
+            ((-111, True), "E-111"),
+            ((-15, True), "E-15"),
+            ((-2, True), "E-02"),
+            ((-1, True), "E-01"),
+            ((0, True), "E+00"),
+            ((+1, True), "E+01"),
+            ((+2, True), "E+02"),
+            ((+15, True), "E+15"),
+            ((+111, True), "E+111"),
         ]
 
-        for (base, exp_val, capitalize), expected_output in cases:
+        for (exp_val, capitalize), expected_output in cases:
             actual_output = exponents.get_standard_exp_str(
-                base=base,
                 exp_val=exp_val,
                 capitalize=capitalize,
             )
             with self.subTest(
-                base=base,
                 exp_val=exp_val,
                 capitalize=capitalize,
             ):
@@ -156,38 +101,24 @@ def test_get_standard_exp_str(self):
 
     def test_get_superscript_exp_str(self):
         cases: list[tuple[tuple[int, int], str]] = [
-            ((10, -10), "×10⁻¹⁰"),
-            ((10, -1), "×10⁻¹"),
-            ((10, 0), "×10⁰"),
-            ((10, 1), "×10¹"),
-            ((10, 2), "×10²"),
-            ((10, 3), "×10³"),
-            ((10, 4), "×10⁴"),
-            ((10, 5), "×10⁵"),
-            ((10, 6), "×10⁶"),
-            ((10, 7), "×10⁷"),
-            ((10, 8), "×10⁸"),
-            ((10, 9), "×10⁹"),
-            ((10, 10), "×10¹⁰"),
-            ((2, -10), "×2⁻¹⁰"),
-            ((2, -1), "×2⁻¹"),
-            ((2, 0), "×2⁰"),
-            ((2, 1), "×2¹"),
-            ((2, 2), "×2²"),
-            ((2, 3), "×2³"),
-            ((2, 4), "×2⁴"),
-            ((2, 5), "×2⁵"),
-            ((2, 6), "×2⁶"),
-            ((2, 7), "×2⁷"),
-            ((2, 8), "×2⁸"),
-            ((2, 9), "×2⁹"),
-            ((2, 10), "×2¹⁰"),
+            (-10, "×10⁻¹⁰"),
+            (-1, "×10⁻¹"),
+            (0, "×10⁰"),
+            (1, "×10¹"),
+            (2, "×10²"),
+            (3, "×10³"),
+            (4, "×10⁴"),
+            (5, "×10⁵"),
+            (6, "×10⁶"),
+            (7, "×10⁷"),
+            (8, "×10⁸"),
+            (9, "×10⁹"),
+            (10, "×10¹⁰"),
         ]
 
-        for (base, exp_val), expected_output in cases:
-            actual_output = exponents.get_superscript_exp_str(base, exp_val)
+        for exp_val, expected_output in cases:
+            actual_output = exponents.get_superscript_exp_str(exp_val)
             with self.subTest(
-                base=base,
                 exp_val=exp_val,
             ):
                 self.assertEqual(expected_output, actual_output)
@@ -267,7 +198,6 @@ def test_get_exp_str(self):
                     "exp_mode": ExpModeEnum.FIXEDPOINT,
                     "exp_format": ExpFormatEnum.STANDARD,
                     "extra_si_prefixes": {},
-                    "extra_iec_prefixes": {},
                     "extra_parts_per_forms": {},
                     "capitalize": False,
                     "superscript": False,
@@ -280,7 +210,6 @@ def test_get_exp_str(self):
                     "exp_mode": ExpModeEnum.PERCENT,
                     "exp_format": ExpFormatEnum.STANDARD,
                     "extra_si_prefixes": {},
-                    "extra_iec_prefixes": {},
                     "extra_parts_per_forms": {},
                     "capitalize": False,
                     "superscript": False,
@@ -293,7 +222,6 @@ def test_get_exp_str(self):
                     "exp_mode": ExpModeEnum.ENGINEERING_SHIFTED,
                     "exp_format": ExpFormatEnum.PREFIX,
                     "extra_si_prefixes": {-2: "c"},
-                    "extra_iec_prefixes": {},
                     "extra_parts_per_forms": {},
                     "capitalize": False,
                     "superscript": False,
@@ -306,7 +234,6 @@ def test_get_exp_str(self):
                     "exp_mode": ExpModeEnum.ENGINEERING_SHIFTED,
                     "exp_format": ExpFormatEnum.PREFIX,
                     "extra_si_prefixes": {-3: None},
-                    "extra_iec_prefixes": {},
                     "extra_parts_per_forms": {},
                     "capitalize": False,
                     "superscript": False,
@@ -319,7 +246,6 @@ def test_get_exp_str(self):
                     "exp_mode": ExpModeEnum.ENGINEERING_SHIFTED,
                     "exp_format": ExpFormatEnum.PARTS_PER,
                     "extra_si_prefixes": {},
-                    "extra_iec_prefixes": {},
                     "extra_parts_per_forms": {},
                     "capitalize": False,
                     "superscript": False,
@@ -332,26 +258,12 @@ def test_get_exp_str(self):
                     "exp_mode": ExpModeEnum.ENGINEERING_SHIFTED,
                     "exp_format": ExpFormatEnum.STANDARD,
                     "extra_si_prefixes": {-3: None},
-                    "extra_iec_prefixes": {},
                     "extra_parts_per_forms": {},
                     "capitalize": False,
                     "superscript": True,
                 },
                 "×10⁻³",
             ),
-            (
-                {
-                    "exp_val": 20,
-                    "exp_mode": ExpModeEnum.BINARY_IEC,
-                    "exp_format": ExpFormatEnum.PREFIX,
-                    "extra_si_prefixes": {},
-                    "extra_iec_prefixes": {},
-                    "extra_parts_per_forms": {},
-                    "capitalize": False,
-                    "superscript": False,
-                },
-                " Mi",
-            ),
         ]
 
         for kwargs, expected_output in cases:
diff --git a/tests/unit/format_utils/test_number_utils.py b/tests/unit/format_utils/test_number_utils.py
index 4d4ded52..b27ef173 100644
--- a/tests/unit/format_utils/test_number_utils.py
+++ b/tests/unit/format_utils/test_number_utils.py
@@ -9,10 +9,10 @@
 
 from tests import NanTestCase
 
-MantissaExpBaseCase = List[
+MantissaExpCase = List[
     Tuple[
         Tuple[Decimal, ExpModeEnum, Union[int, ExpValEnum]],
-        Tuple[Decimal, int, int],
+        Tuple[Decimal, int],
     ]
 ]
 
@@ -61,30 +61,6 @@ def test_get_top_dec_place(self):
                         actual_output,
                     )
 
-    def test_get_top_dec_place_binary(self):
-        cases = [
-            (Decimal("32"), 5),
-            (Decimal("64"), 6),
-            (Decimal("nan"), 0),
-            (Decimal("-inf"), 0),
-            (Decimal("0"), 0),
-        ]
-
-        for base_number, expected_output in cases:
-            for factor in [Decimal(1), Decimal(1.5)]:
-                test_number = factor * base_number
-                actual_output = numbers.get_top_dec_place_binary(test_number)
-                with self.subTest(
-                    base_number=base_number,
-                    test_number=test_number,
-                    expected_output=expected_output,
-                    actual_output=actual_output,
-                ):
-                    self.assertEqual(
-                        expected_output,
-                        actual_output,
-                    )
-
     def test_get_bottom_dec_place(self):
         cases: list[tuple[Decimal, int]] = [
             # Unnormalized:
@@ -375,221 +351,119 @@ def test_get_engineering_exp_bad_input_exp(self):
             2,
         )
 
-    def test_get_binary_exp(self):
-        cases: list[tuple[tuple[Decimal, int | ExpValEnum], int]] = [
-            ((Decimal("0.0625"), ExpValEnum.AUTO), -4),
-            ((Decimal("0.125"), ExpValEnum.AUTO), -3),
-            ((Decimal("0.25"), ExpValEnum.AUTO), -2),
-            ((Decimal("0.5"), ExpValEnum.AUTO), -1),
-            ((Decimal("1"), ExpValEnum.AUTO), 0),
-            ((Decimal("2"), ExpValEnum.AUTO), 1),
-            ((Decimal("4"), ExpValEnum.AUTO), 2),
-            ((Decimal("8"), ExpValEnum.AUTO), 3),
-            ((Decimal("16"), ExpValEnum.AUTO), 4),
-            ((Decimal("32"), ExpValEnum.AUTO), 5),
-            ((Decimal("64"), ExpValEnum.AUTO), 6),
-            ((Decimal("0.0625"), 3), 3),
-            ((Decimal("0.125"), 3), 3),
-            ((Decimal("0.25"), 3), 3),
-            ((Decimal("0.5"), 3), 3),
-            ((Decimal("1"), 3), 3),
-            ((Decimal("2"), 3), 3),
-            ((Decimal("4"), 3), 3),
-            ((Decimal("8"), 3), 3),
-            ((Decimal("16"), 3), 3),
-            ((Decimal("32"), 3), 3),
-            ((Decimal("64"), 3), 3),
-        ]
-
-        iec: bool = False
-        for (base_number, input_exp), expected_output in cases:
-            for factor in [Decimal(1), Decimal(1.5)]:
-                test_number = factor * base_number
-                actual_output = numbers.get_binary_exp(
-                    test_number,
-                    input_exp,
-                    iec=iec,
-                )
-                with self.subTest(
-                    base_number=base_number,
-                    test_number=test_number,
-                    input_exp=input_exp,
-                    iec=iec,
-                    expected_output=expected_output,
-                    actual_output=actual_output,
-                ):
-                    self.assertEqual(expected_output, actual_output)
-
-    def test_get_binary_iec_exp(self):
-        cases: list[tuple[tuple[Decimal, int | ExpValEnum], int]] = [
-            ((Decimal("0.0625"), ExpValEnum.AUTO), -10),
-            ((Decimal("0.125"), ExpValEnum.AUTO), -10),
-            ((Decimal("0.25"), ExpValEnum.AUTO), -10),
-            ((Decimal("0.5"), ExpValEnum.AUTO), -10),
-            ((Decimal("1"), ExpValEnum.AUTO), 0),
-            ((Decimal("2"), ExpValEnum.AUTO), 0),
-            ((Decimal("4"), ExpValEnum.AUTO), 0),
-            ((Decimal("8"), ExpValEnum.AUTO), 0),
-            ((Decimal("16"), ExpValEnum.AUTO), 0),
-            ((Decimal("32"), ExpValEnum.AUTO), 0),
-            ((Decimal("64"), ExpValEnum.AUTO), 0),
-            ((Decimal("1024"), ExpValEnum.AUTO), 10),
-            ((Decimal(2**20), ExpValEnum.AUTO), 20),
-            ((Decimal(2**30), ExpValEnum.AUTO), 30),
-            ((Decimal("0.0625"), 10), 10),
-            ((Decimal("0.125"), 10), 10),
-            ((Decimal("0.25"), 10), 10),
-            ((Decimal("0.5"), 10), 10),
-            ((Decimal("1"), 10), 10),
-            ((Decimal("2"), 10), 10),
-            ((Decimal("4"), 10), 10),
-            ((Decimal("8"), 10), 10),
-            ((Decimal("16"), 10), 10),
-            ((Decimal("32"), 10), 10),
-            ((Decimal("64"), 10), 10),
-        ]
-
-        iec: bool = True
-        for (base_number, input_exp), expected_output in cases:
-            for factor in [Decimal(1), Decimal(1.5)]:
-                test_number = factor * base_number
-                actual_output = numbers.get_binary_exp(
-                    test_number,
-                    input_exp,
-                    iec=iec,
-                )
-                with self.subTest(
-                    base_number=base_number,
-                    test_number=test_number,
-                    input_exp=input_exp,
-                    iec=iec,
-                    expected_output=expected_output,
-                    actual_output=actual_output,
-                ):
-                    self.assertEqual(expected_output, actual_output)
-
-    def test_get_binary_iec_bad_input_exp(self):
-        self.assertRaises(
-            ValueError,
-            numbers.get_binary_exp,
-            Decimal("1.5"),
-            5,
-            iec=True,
-        )
-
-    def test_get_mantissa_exp_base(self):
-        cases: MantissaExpBaseCase = [
+    def test_get_mantissa_exp(self):
+        cases: MantissaExpCase = [
             (
                 (Decimal("123456"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("123456"), 0, 10),
+                (Decimal("123456"), 0),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("1234.56"), 0, 10),
+                (Decimal("1234.56"), 0),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("12.3456"), 0, 10),
+                (Decimal("12.3456"), 0),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("0.123456"), 0, 10),
+                (Decimal("0.123456"), 0),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("0.00123456"), 0, 10),
+                (Decimal("0.00123456"), 0),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("0.0000123456"), 0, 10),
+                (Decimal("0.0000123456"), 0),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.PERCENT, ExpValEnum.AUTO),
-                (Decimal("123456"), 0, 10),
+                (Decimal("123456"), 0),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.PERCENT, ExpValEnum.AUTO),
-                (Decimal("1234.56"), 0, 10),
+                (Decimal("1234.56"), 0),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.PERCENT, ExpValEnum.AUTO),
-                (Decimal("12.3456"), 0, 10),
+                (Decimal("12.3456"), 0),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.PERCENT, ExpValEnum.AUTO),
-                (Decimal("0.123456"), 0, 10),
+                (Decimal("0.123456"), 0),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.PERCENT, ExpValEnum.AUTO),
-                (Decimal("0.00123456"), 0, 10),
+                (Decimal("0.00123456"), 0),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.PERCENT, ExpValEnum.AUTO),
-                (Decimal("0.0000123456"), 0, 10),
+                (Decimal("0.0000123456"), 0),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("1.23456"), 5, 10),
+                (Decimal("1.23456"), 5),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("1.23456"), 3, 10),
+                (Decimal("1.23456"), 3),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("1.23456"), 1, 10),
+                (Decimal("1.23456"), 1),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("1.23456"), -1, 10),
+                (Decimal("1.23456"), -1),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("1.23456"), -3, 10),
+                (Decimal("1.23456"), -3),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("1.23456"), -5, 10),
+                (Decimal("1.23456"), -5),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.ENGINEERING, ExpValEnum.AUTO),
-                (Decimal("123.456"), 3, 10),
+                (Decimal("123.456"), 3),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.ENGINEERING, ExpValEnum.AUTO),
-                (Decimal("1.23456"), 3, 10),
+                (Decimal("1.23456"), 3),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.ENGINEERING, ExpValEnum.AUTO),
-                (Decimal("12.3456"), 0, 10),
+                (Decimal("12.3456"), 0),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.ENGINEERING, ExpValEnum.AUTO),
-                (Decimal("123.456"), -3, 10),
+                (Decimal("123.456"), -3),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.ENGINEERING, ExpValEnum.AUTO),
-                (Decimal("1.23456"), -3, 10),
+                (Decimal("1.23456"), -3),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.ENGINEERING, ExpValEnum.AUTO),
-                (Decimal("12.3456"), -6, 10),
+                (Decimal("12.3456"), -6),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.ENGINEERING_SHIFTED, ExpValEnum.AUTO),
-                (Decimal("0.123456"), 6, 10),
+                (Decimal("0.123456"), 6),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.ENGINEERING_SHIFTED, ExpValEnum.AUTO),
-                (Decimal("1.23456"), 3, 10),
+                (Decimal("1.23456"), 3),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.ENGINEERING_SHIFTED, ExpValEnum.AUTO),
-                (Decimal("12.3456"), 0, 10),
+                (Decimal("12.3456"), 0),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.ENGINEERING_SHIFTED, ExpValEnum.AUTO),
-                (Decimal("0.123456"), 0, 10),
+                (Decimal("0.123456"), 0),
             ),
             (
                 (
@@ -597,7 +471,7 @@ def test_get_mantissa_exp_base(self):
                     ExpModeEnum.ENGINEERING_SHIFTED,
                     ExpValEnum.AUTO,
                 ),
-                (Decimal("1.23456"), -3, 10),
+                (Decimal("1.23456"), -3),
             ),
             (
                 (
@@ -605,106 +479,26 @@ def test_get_mantissa_exp_base(self):
                     ExpModeEnum.ENGINEERING_SHIFTED,
                     ExpValEnum.AUTO,
                 ),
-                (Decimal("12.3456"), -6, 10),
-            ),
-            (
-                (Decimal(1 * 2**-10), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.0"), -10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-10), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.5"), -10, 2),
-            ),
-            (
-                (Decimal(1 * 2**-5), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.0"), -5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-5), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.5"), -5, 2),
-            ),
-            (
-                (Decimal(1 * 2**0), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.0"), 0, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**0), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.5"), 0, 2),
-            ),
-            (
-                (Decimal(1 * 2**5), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.0"), 5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**5), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.5"), 5, 2),
-            ),
-            (
-                (Decimal(1 * 2**10), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.0"), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**10), ExpModeEnum.BINARY, ExpValEnum.AUTO),
-                (Decimal("1.5"), 10, 2),
-            ),
-            (
-                (Decimal(1 * 2**-10), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("1.0"), -10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-10), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("1.5"), -10, 2),
-            ),
-            (
-                (Decimal(1 * 2**-5), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("32"), -10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-5), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("48"), -10, 2),
-            ),
-            (
-                (Decimal(1 * 2**0), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("1.0"), 0, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**0), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("1.5"), 0, 2),
-            ),
-            (
-                (Decimal(1 * 2**5), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("32"), 0, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**5), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("48"), 0, 2),
-            ),
-            (
-                (Decimal(1 * 2**10), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("1.0"), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**10), ExpModeEnum.BINARY_IEC, ExpValEnum.AUTO),
-                (Decimal("1.5"), 10, 2),
+                (Decimal("12.3456"), -6),
             ),
             (
                 (Decimal("nan"), ExpModeEnum.FIXEDPOINT, ExpValEnum.AUTO),
-                (Decimal("nan"), 0, 10),
+                (Decimal("nan"), 0),
             ),
             (
                 (Decimal("inf"), ExpModeEnum.SCIENTIFIC, ExpValEnum.AUTO),
-                (Decimal("inf"), 0, 10),
+                (Decimal("inf"), 0),
             ),
             (
                 (Decimal("-inf"), ExpModeEnum.SCIENTIFIC, 5),
-                (Decimal("-inf"), 5, 10),
+                (Decimal("-inf"), 5),
             ),
         ]
 
         for input_data, output_data in cases:
             num, exp_mode, input_exp = input_data
-            expected_mantissa, expected_exp, expected_base = output_data
-            actual_mantissa, actual_exp, actual_base = numbers.get_mantissa_exp_base(
+            expected_mantissa, expected_exp = output_data
+            actual_mantissa, actual_exp = numbers.get_mantissa_exp(
                 num,
                 exp_mode,
                 input_exp,
@@ -717,221 +511,138 @@ def test_get_mantissa_exp_base(self):
                 actual_mantissa=actual_mantissa,
                 expected_exp=expected_exp,
                 actual_exp=actual_exp,
-                expected_base=expected_base,
-                actual_base=actual_base,
             ):
                 self.assertNanEqual(expected_mantissa, actual_mantissa)
                 self.assertEqual(expected_exp, actual_exp)
-                self.assertEqual(expected_base, actual_base)
 
-    def test_get_mantissa_exp_base_input_exp(self):
-        cases: MantissaExpBaseCase = [
+    def test_get_mantissa_exp_input_exp(self):
+        cases: MantissaExpCase = [
             (
                 (Decimal("123456"), ExpModeEnum.FIXEDPOINT, 0),
-                (Decimal("123456"), 0, 10),
+                (Decimal("123456"), 0),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.FIXEDPOINT, 0),
-                (Decimal("1234.56"), 0, 10),
+                (Decimal("1234.56"), 0),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.FIXEDPOINT, 0),
-                (Decimal("12.3456"), 0, 10),
+                (Decimal("12.3456"), 0),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.FIXEDPOINT, 0),
-                (Decimal("0.123456"), 0, 10),
+                (Decimal("0.123456"), 0),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.FIXEDPOINT, 0),
-                (Decimal("0.00123456"), 0, 10),
+                (Decimal("0.00123456"), 0),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.FIXEDPOINT, 0),
-                (Decimal("0.0000123456"), 0, 10),
+                (Decimal("0.0000123456"), 0),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.PERCENT, 0),
-                (Decimal("123456"), 0, 10),
+                (Decimal("123456"), 0),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.PERCENT, 0),
-                (Decimal("1234.56"), 0, 10),
+                (Decimal("1234.56"), 0),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.PERCENT, 0),
-                (Decimal("12.3456"), 0, 10),
+                (Decimal("12.3456"), 0),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.PERCENT, 0),
-                (Decimal("0.123456"), 0, 10),
+                (Decimal("0.123456"), 0),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.PERCENT, 0),
-                (Decimal("0.00123456"), 0, 10),
+                (Decimal("0.00123456"), 0),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.PERCENT, 0),
-                (Decimal("0.0000123456"), 0, 10),
+                (Decimal("0.0000123456"), 0),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.SCIENTIFIC, 2),
-                (Decimal("1234.56"), 2, 10),
+                (Decimal("1234.56"), 2),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.SCIENTIFIC, 2),
-                (Decimal("12.3456"), 2, 10),
+                (Decimal("12.3456"), 2),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.SCIENTIFIC, 2),
-                (Decimal("0.123456"), 2, 10),
+                (Decimal("0.123456"), 2),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.SCIENTIFIC, 2),
-                (Decimal("0.00123456"), 2, 10),
+                (Decimal("0.00123456"), 2),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.SCIENTIFIC, 2),
-                (Decimal("0.0000123456"), 2, 10),
+                (Decimal("0.0000123456"), 2),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.SCIENTIFIC, 2),
-                (Decimal("0.000000123456"), 2, 10),
+                (Decimal("0.000000123456"), 2),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.ENGINEERING, 3),
-                (Decimal("123.456"), 3, 10),
+                (Decimal("123.456"), 3),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.ENGINEERING, 3),
-                (Decimal("1.23456"), 3, 10),
+                (Decimal("1.23456"), 3),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.ENGINEERING, 3),
-                (Decimal("0.0123456"), 3, 10),
+                (Decimal("0.0123456"), 3),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.ENGINEERING, 3),
-                (Decimal("0.000123456"), 3, 10),
+                (Decimal("0.000123456"), 3),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.ENGINEERING, 3),
-                (Decimal("0.00000123456"), 3, 10),
+                (Decimal("0.00000123456"), 3),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.ENGINEERING, 3),
-                (Decimal("0.0000000123456"), 3, 10),
+                (Decimal("0.0000000123456"), 3),
             ),
             (
                 (Decimal("123456"), ExpModeEnum.ENGINEERING_SHIFTED, 3),
-                (Decimal("123.456"), 3, 10),
+                (Decimal("123.456"), 3),
             ),
             (
                 (Decimal("1234.56"), ExpModeEnum.ENGINEERING_SHIFTED, 3),
-                (Decimal("1.23456"), 3, 10),
+                (Decimal("1.23456"), 3),
             ),
             (
                 (Decimal("12.3456"), ExpModeEnum.ENGINEERING_SHIFTED, 3),
-                (Decimal("0.0123456"), 3, 10),
+                (Decimal("0.0123456"), 3),
             ),
             (
                 (Decimal("0.123456"), ExpModeEnum.ENGINEERING_SHIFTED, 3),
-                (Decimal("0.000123456"), 3, 10),
+                (Decimal("0.000123456"), 3),
             ),
             (
                 (Decimal("0.00123456"), ExpModeEnum.ENGINEERING_SHIFTED, 3),
-                (Decimal("0.00000123456"), 3, 10),
+                (Decimal("0.00000123456"), 3),
             ),
             (
                 (Decimal("0.0000123456"), ExpModeEnum.ENGINEERING_SHIFTED, 3),
-                (Decimal("0.0000000123456"), 3, 10),
-            ),
-            (
-                (Decimal(1 * 2**-10), ExpModeEnum.BINARY, 5),
-                (Decimal("3.0517578125e-05"), 5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-10), ExpModeEnum.BINARY, 5),
-                (Decimal("4.57763671875e-05"), 5, 2),
-            ),
-            (
-                (Decimal(1 * 2**-5), ExpModeEnum.BINARY, 5),
-                (Decimal("0.0009765625"), 5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-5), ExpModeEnum.BINARY, 5),
-                (Decimal("0.00146484375"), 5, 2),
-            ),
-            (
-                (Decimal(1 * 2**0), ExpModeEnum.BINARY, 5),
-                (Decimal("0.03125"), 5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**0), ExpModeEnum.BINARY, 5),
-                (Decimal("0.046875"), 5, 2),
-            ),
-            (
-                (Decimal(1 * 2**5), ExpModeEnum.BINARY, 5),
-                (Decimal("1.0"), 5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**5), ExpModeEnum.BINARY, 5),
-                (Decimal("1.5"), 5, 2),
-            ),
-            (
-                (Decimal(1 * 2**10), ExpModeEnum.BINARY, 5),
-                (Decimal("32"), 5, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**10), ExpModeEnum.BINARY, 5),
-                (Decimal("48"), 5, 2),
-            ),
-            (
-                (Decimal(1 * 2**-10), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1 * 2**-20), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-10), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1.5 * 2**-20), 10, 2),
-            ),
-            (
-                (Decimal(1 * 2**-5), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1 * 2**-15), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**-5), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1.5 * 2**-15), 10, 2),
-            ),
-            (
-                (Decimal(1 * 2**0), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1 * 2**-10), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**0), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1.5 * 2**-10), 10, 2),
-            ),
-            (
-                (Decimal(1 * 2**5), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1 * 2**-5), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**5), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal(1.5 * 2**-5), 10, 2),
-            ),
-            (
-                (Decimal(1 * 2**10), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal("1.0"), 10, 2),
-            ),
-            (
-                (Decimal(1.5 * 2**10), ExpModeEnum.BINARY_IEC, 10),
-                (Decimal("1.5"), 10, 2),
+                (Decimal("0.0000000123456"), 3),
             ),
         ]
 
         for input_data, output_data in cases:
             num, exp_mode, input_exp = input_data
-            expected_mantissa, expected_exp, expected_base = output_data
-            actual_mantissa, actual_exp, actual_base = numbers.get_mantissa_exp_base(
+            expected_mantissa, expected_exp = output_data
+            actual_mantissa, actual_exp = numbers.get_mantissa_exp(
                 num,
                 exp_mode,
                 input_exp,
@@ -944,17 +655,14 @@ def test_get_mantissa_exp_base_input_exp(self):
                 actual_mantissa=actual_mantissa,
                 expected_exp=expected_exp,
                 actual_exp=actual_exp,
-                expected_base=expected_base,
-                actual_base=actual_base,
             ):
                 self.assertEqual(expected_mantissa, actual_mantissa)
                 self.assertEqual(expected_exp, actual_exp)
-                self.assertEqual(expected_base, actual_base)
 
-    def test_get_mantissa_exp_base_invalid_exp_mode(self):
+    def test_get_mantissa_exp_invalid_exp_mode(self):
         self.assertRaises(
             ValueError,
-            numbers.get_mantissa_exp_base,
+            numbers.get_mantissa_exp,
             Decimal("3"),
             exp_mode="fixed_point",
             input_exp=3,
@@ -971,8 +679,6 @@ def test_parse_mantissa_from_ascii_exp_str(self):
             ("123_456", "123_456"),
             ("123_456.789 876", "123_456.789 876"),
             ("1E+03", "1"),
-            ("(nan)b-4", "nan"),
-            ("(nan)B-4", "nan"),
             ("inf", "inf"),
             ("-inf", "-inf"),
         ]
@@ -1000,11 +706,11 @@ def test_parse_mantissa_from_ascii_exp_str_invalid(self):
                     input_str,
                 )
 
-    def test_get_mantissa_exp_base_invalid_input(self):
+    def test_get_mantissa_exp_invalid_input(self):
         with self.subTest(msg="fixed_point_set_exp"):
             self.assertRaises(
                 ValueError,
-                numbers.get_mantissa_exp_base,
+                numbers.get_mantissa_exp,
                 num=Decimal(3),
                 exp_mode=ExpModeEnum.FIXEDPOINT,
                 input_exp=1,
@@ -1013,25 +719,16 @@ def test_get_mantissa_exp_base_invalid_input(self):
         with self.subTest(msg="engineering_set_exp"):
             self.assertRaises(
                 ValueError,
-                numbers.get_mantissa_exp_base,
+                numbers.get_mantissa_exp,
                 num=Decimal(3),
                 exp_mode=ExpModeEnum.ENGINEERING,
                 input_exp=1,
             )
 
-        with self.subTest(msg="binary_iec_set_exp"):
-            self.assertRaises(
-                ValueError,
-                numbers.get_mantissa_exp_base,
-                num=Decimal(3),
-                exp_mode=ExpModeEnum.BINARY_IEC,
-                input_exp=3,
-            )
-
         with self.subTest(msg="bad_exp_mode"):
             self.assertRaises(
                 ValueError,
-                numbers.get_mantissa_exp_base,
+                numbers.get_mantissa_exp,
                 num=Decimal(3),
                 exp_mode="eng",
                 input_exp=3,
diff --git a/tests/unit/test_invalid_options.py b/tests/unit/test_invalid_options.py
index 76c0ffc5..f1900795 100644
--- a/tests/unit/test_invalid_options.py
+++ b/tests/unit/test_invalid_options.py
@@ -50,14 +50,6 @@ def test_engineering_shifted(self):
             exp_val=1,
         )
 
-    def test_binary_iec(self):
-        self.assertRaises(
-            ValueError,
-            Formatter,
-            exp_mode="binary_iec",
-            exp_val=5,
-        )
-
     def test_upper_separator_non_option(self):
         self.assertRaises(
             ValueError,
@@ -171,20 +163,10 @@ def test_make_exp_str_invalid_output_format(self):
         self.assertRaises(
             ValueError,
             _make_exp_str,
-            10,
             0,
             "rst",
         )
 
-    def test_make_exp_str_invalid_base(self):
-        self.assertRaises(
-            ValueError,
-            _make_exp_str,
-            16,
-            0,
-            "ascii",
-        )
-
     def test_invalid_translation_key(self):
         self.assertRaises(
             TypeError,
diff --git a/tests/unit/test_validation.py b/tests/unit/test_validation.py
index 2e8bafab..297d914b 100644
--- a/tests/unit/test_validation.py
+++ b/tests/unit/test_validation.py
@@ -107,7 +107,6 @@ def test_validate_exp_format(self):
     def test_validate_extra_translations(self):
         translation_keys = (
             "extra_si_prefixes",
-            "extra_iec_prefixes",
             "extra_parts_per_forms",
         )