Wolfram Computation Meets Knowledge

Computing Exact Uncertainties—Physical Constants in the Current and in the New SI


In the so-called “new SI,” the updated version of the International System of Units that will define the seven base units (second, meter, kilogram, ampere, kelvin, mole and candela) and that goes into effect May 20 of 2019, all SI units will be definitionally based on exact values of fundamental constants of physics. And as a result, all the named units of the SI (newton, volt, ohm, pascal, etc.) will ultimately be expressible through fundamental constants. (Finally, fundamental physics will be literally ruling our daily life 😁.)

Here is how things will change from the evening of Monday, May 20, to the morning of Tuesday, May 21, of this year.

Computing this table will be the goal of this blog. So, let’s start with a short recap of what will change in the new SI.

In addition to the well-known exact value of the speed of light, in a few weeks four further physical constants—the Planck constant, the Boltzmann constant, the Avogadro constant and Millikan’s constant (more often called elementary charge)—will have exact values. The decision for this change was internationally accepted last November (I wrote about it in my last blog).

Here is the current draft of the SI Brochure. Here is a snippet from page 12 of this document.


Note that in these definitions the decimal numbers are meant as exact decimal numbers, rather than, say, machine numbers on a computer that have a finite precision and are not exact numbers. The Cs‐133 hyperfine splitting frequency, the speed of light and the “luminous efficacy” already have exact values today.

The World Discusses the Forthcoming Changes

This change will have some interesting consequences for other physical constants: Some constants that are currently measured and have values with uncertainties will become exact and some constants that currently have exact values will in the future have approximate values with finite uncertainties. These changes are unavoidable to guarantee the overall consistency of the system.

In the first issue of Physics World this year, a letter to the editor by William Gough touched on this subject; he wrote:

With the fixing of the charge on the electron () and the Planck constant (), all the units of physics are now “set in stone”, which is very satisfying. But it does raise one uncomfortable question. The fine structure constant where is the speed of light and is . From the familiar equations and , we quickly find that . This is of course a pure number with no dimensions, and it has now been set in stone as exactly 1/137.13601, which is very close to the accepted value. This is not surprising since this latter would have been used in the agreed new values for and . But nature has its own value, unknown to us at present, which is therefore set in diamond. We might all be forgiven for implying that we know better than nature. But what if a future theory of the universe becomes accepted, which produces an exact value for which is significantly different from its accepted value? Is this likely to happen? There have been attempts to find a theoretical value for , but they involve fearsome and controversial quantum electrodynamics.

The problem is that in the new SI system, both and will now have inexact values, with some uncertainty. In this blog, we will use the Wolfram Language and its knowledge about physical units and constants to see how these and other physical constants will gain (or lose) uncertainty, and why this is a mathematical consequence of the definition of the base units.

Quick Recap of Relevant Wolfram Language Ingredients

The Wolfram Language is a uniquely suited environment to carry out numerical experiments and symbolic computations to shed some light on the consequences. In addition to its general computation capabilities, three components of the system turn out to be very useful here:

1) The Wolfram Language’s units and physical quantity framework.

“Classical” units (such as meters, feet, etc.) can be used in computations and visualizations. And, of course, in unit conversions.


Quantity[10, "Meters"]

The conversion to US customary units results in a fraction (not an approximate real number!) due to exactly defined relations of these two units.


UnitConvert[Quantity[10, "Meters"], "Feet"]

Physicists (especially) like to use “natural” units. Often these natural units are just physical constants or combinations thereof. For instance, the speed of light (here input in natural language form).


Quantity[1, "SpeedOfLight"]

Expressed in SI units (as it is a speed, the units meters and seconds are needed), the speed of light has an exact value.


UnitConvert[%, "SIBase"]

The Planck constant, on the other hand, currently does not have an exact value. So its magnitude when expressed in SI base units is an approximate decimal number.


Quantity[1, "PlanckConstant"]


UnitConvert[%, "SIBase"]

Note that the precision of the 6.626070… is reflecting the number of known digits.




{Quantity[1,"SpeedOfLight"] ⟹ 
Quantity[1,"PlanckConstant"]⟹ UnitConvert[Quantity[1,"PlanckConstant"],"SIBase"]}

Precision/@Last/@ %

Precision/@Last/@ %

This is the latest recommended value for the Planck constant, published in CODATA 2017 in preparation for making the constants exact. Here is the relevant table:


Physical constants (or combinations thereof) that connect two physical quantities can often be used as natural units. The simplest examples would be to measure speeds in terms of the speed of light or microscopic angular momentum in terms of . Or energy could be measured in terms of mass with an implicit factor of . The function DimensionalCombinations can be used to find combinations of physical constants that allow the connection of two given physical quantities. For instance, the following relations between mass and energy can be constructed:


DimensionalCombinations[{"Mass","Energy"},IncludeQuantities->"PhysicalConstants",GeneratedParameters->None] //Select[MemberQ[#,"Energy", ∞]&&MemberQ[#,"Mass", ∞]&]

The first identity is just Einstein’s famous , the second is the first one in disguise, and the third one is (dimensionally) saying .

2) The "PhysicalConstant" entity type, recently added to the Wolfram Knowledgebase.

Functions and objects in the Wolfram Language are “born computationally,” meaning they are ready be be used for and in computations. But for describing and modeling the real world, one needs data about the real world. The entity framework is a convenient and fully integrated way to get to such data. Here is some data about the electron, the proton and the neutron.


EntityValue[{Entity["Particle", "Electron"], 
  Entity["Particle", "Proton"], 
  Entity["Particle", "Neutron"]}, {EntityProperty["Particle", 
   "BaryonNumber"], EntityProperty["Particle", "Charge"], 
  EntityProperty["Particle", "Spin"], 
  EntityProperty["Particle", "GFactor"], 
  EntityProperty["Particle", "Mass"], 
  EntityProperty["Particle", "Radius"]}, "Dataset"]

One of the new kids on the entity type block is physical constants. Currently the Knowledgebase knows about 250+ physical constants.


EntityValue["PhysicalConstant", "EntityCount"]

Here are a dozen randomly selected examples. There is no clear definition for what exactly constitutes a physical constant: masses of fundamental particles, the parameters of the Lagrangian of the Standard Model, etc. For convenience, the domain also contains astronomical constants according to the Astronomical Almanac.



The most fundamental physical constants have been called class C constants in a well-known paper by Jean-Marc Lévy-Leblond. Here are the class C and B constants.


  EntityProperty["PhysicalConstant", "LevyLeblondClass"] -> 
   "C"] // EntityList


  EntityProperty["PhysicalConstant", "LevyLeblondClass"] -> 
   "B"] // EntityList

Take, for instance, the natural unit of time, the Planck time. The functions ToEntity and FromEntity allow one to seamlessly go back and forth between physical constants as units and physical constants as entities. Here is the entity corresponding to the unit Planck time.


Quantity[1, "PlanckTime"]



The Knowledgebase has a variety of metainformation about it, e.g. its values in the last CODATA sheets.


%[EntityProperty["PhysicalConstant", "ValueAssociation"]]

The last output, which contains the value and the uncertainty, brings us to the third important feature that will be useful later:

3) The introduction of the function Around[] in Version 12 of the Wolfram Language. The function Around[] represents an uncertain value with mean and an uncertainty. The arithmetic model of Around[] follows the GUM (Guide to the Expression of Uncertainty in Measurement)—not to be confused with Leibniz’s Plus-Minus-calculus. Here is such a value with uncertainty.



The most important and useful aspect of computations with quantities that have uncertainties is that they take correlations properly into account. Naively using such quantities in arithmetic-like numbers or intervals could under- or overestimate the resulting uncertainty.



The function AroundReplace[] does take correlation into account.



Back to the Letter to the Editor

Now let’s use these three ingredients and have a more detailed look at the preceding letter to the editor.

With the current approximate values for and , these two values for the fine-structure constant agree within their uncertainties. The first one is the expression from the letter to the editor and the second is the quantity (Quantity[]) representing the fine-structure constant.

{(e^2) /(4π 1/(4 π 10^-7H/mc) ℏ) ,}//UnitConvert

{(Quantity[1, "ElementaryCharge"]^2) /(
      4 \[Pi] 1/(
       Quantity[4 \[Pi] 10^-7, ("Henries")/("Meters")] Quantity[1, 
              "SpeedOfLight"]) Quantity[1, 
      "ReducedPlanckConstant"]) , 
  Quantity[None, "FineStructureConstant"]} // UnitConvert

Every few years, CODATA publishes the official values of the fundamental constants (see here for the fine-structure constant); as I’ve mentioned, the values used in the Wolfram Language are these latest CODATA values. The finite uncertainty is reflected in the precision of the number.

Note that the directly measured value of the fine-structure constant is a bit more precise than the one that expresses the fine-structure constant through other constants.

Precision /@ %

Precision /@ %

If we use the forthcoming exact values for and and use the current exact value for , we obtain the following exact value for the fine-structure constant in the form .


With[{e = 
   Quantity[1602176634/1000000000 10^-19, "Coulombs"], \[HBar] = 
   1/(2 \[Pi]) Quantity[662607015/100000000 10^-34, 
     "Joules" "Seconds"]}, (e^2)/(4 \[Pi] 1/(Quantity[
        4 \[Pi] 10^-7, ("Henries")/("Meters")] Quantity[1, 
        "SpeedOfLight"]) \[HBar])]

It is highly unlikely the Lord, who doesn’t even play dice, would choose such a number for the value of in our universe. This means while and will be fixed in the new SI, unavoidably the current exact values for and must be unfixed (see also Goldfarb’s paper about in the new SI). (We will come back to why and must become inexact in a moment.)

This means after May 20 of this year, these outputs will be different.


{Quantity[1, "MagneticConstant"], 
  Quantity[1, "ElectricConstant"]} // UnitConvert 



(In a brief side note, the "PhysicalConstant" entity type also has conjectured values for constants, such as the fine-structure constant):


 "Value" /. 
  Entity["PhysicalConstant", "FineStructureConstant"][
     "ConjecturedValueAssociation"]][[All, 2]], 6]


N[%, 20]

Now, aside from the theological argument about the exact form of the fine-structure constant, from a physics point of view, why should and become inexact? As a plausibility argument, let’s look at . One of its most prominent appearances is in Coulomb’s law.



In the current SI, the ampere has an “exact” definition:

The ampere is that constant current which, if maintained in two straight parallel conductors of infinite length, of negligible circular cross-section, and placed 1 metre apart in vacuum, would produce between these conductors a force equal to newton per metre of length.

This definition uses the purely mechanical units newton and meter (meaning, after expansion, second, meter and kilogram) to define the ampere. No relation to the charge of an electron is made, and in the current SI, the elementary charge is an experimentally measured quantity.


Quantity[None, "ElementaryCharge"] // UnitConvert

And this experimentally measured value has changed over the years (and gotten more precise).


Entity["PhysicalConstant", "ElementaryCharge"][
  EntityProperty["PhysicalConstant", "ValueAssociation"]] // 
 Take[#, 3] &

The force on the left-hand side of Coulomb’s law (expressed in newtons) contains the base unit kilogram, which, after fixing the value of the Planck constant becoming constant, is exactly defined too. As there is no reason to assume that the laws of nature can all be expressed in finite rational numbers, the only possible “moving part” in Coulomb’s law will be . Its numerical value has to be determined, and its value will make the left-hand side and the right-hand side of Coulomb’s law match up.

From a more fundamental physics point of view, the fine-structure constant is the coupling constant that determines the strength of electromagnetic interactions. And maybe one day physics will be able to compute the value of the fine-structure constant, but we are not there yet. Just a choice of unit definitions cannot fix the value of .

Now, do both and really become unfixed, or is it possible to keep one of them exact? Because of the already exact speed of light and the relation , if either or is exact, the other one would have to be exact. We know that at least one must become unfixed, so it follows that both must be unfixed.

The values that are now given to the Planck constant, the Boltzmann constant, the Avogadro constant and the elementary charge are neither arbitrary nor fully determined. They are determined to about eight digits, so that the units they define after May 20 match the “size” of the units they define before May 20. But digits further to the right are not determined. So the value of the future exact value of the elementary charge could have been rather than . It’s Occam’s razor and rationality that let us use .

On a more technical level, the slip in the preceding computation was that through the term in the formula implicitly the ampere before the redefinition (remember ) was used, but the exact value of the elementary charge, meaning the definition of the ampere after the redefinition, was also used. And one always has to stay within one unit system.

Computing the Table of Uncertainty-Optimized Forms

So, the natural question is what should these “unfixed” values be? In my last blog, I “manually” constructed the new value of . What can be done manually can be done by a computer program, so let’s implement a little program that computes the uncertainty-optimized form of derived physical constants. In a forward-oriented approach, an entity class of the seven constants that define the new SI is already available.

Here are the constants that will have an exact value in the new SI.


SIExactConstants = 
 EntityList[EntityClass["PhysicalConstant", "SIExact"]]

The current values, together with their uncertainty (now using the function Around[]) are the following:


    Style[{"constant", "symbol", "current CODATA value"}, 
     Italic]]}, {#, 
     FromEntity[#] /. 1 -> None, #[
       "Value", {"Uncertainty" -> "Around"}]]} & /@ {Entity[
     "PhysicalConstant", "PlanckConstant"], 
    Entity["PhysicalConstant", "BoltzmannConstant"], 
    Entity["PhysicalConstant", "ElementaryCharge"], 
    Entity["PhysicalConstant", "AvogadroConstant"]}], Dividers -> All,
  Background -> {Automatic, {LightGray, {None}}}]

The "PhysicalConstant" entity domain allows us to get to the new, forthcoming physical quantity values. Note that like in all computer languages, exact integers and rationals are either explicit integers or rational numbers, but not decimal numbers.


                                    {"Entity","Quantity","ValueAssociation"}]/. 1->None;
TextGrid[Join[{Thread[Style[{"constant","symbol","new exact value"},Italic]]},{#1,#2,"Value"/.("SIBrochure2016Draft"/.#3)}&@@@SIData],Dividers->All,Background->{Automatic,{LightGray,{None}}}]


TextGrid[Join[{Thread[Style[{"constant","symbol","new exact value"},Italic]]},{#1,#2,"Value"/.("SIBrochure2016Draft"/.#3)}&@@@SIData],Dividers->All,Background->{Automatic,{LightGray,{None}}}]

Many physical constants can be related by equations given by physical theories of different fields of physics. In what follows, we want to restrict ourselves to the theory of fundamental electromagnetic phenomena, in which the uncertainty of constants will be reduced to that of the fine-structure constant and the Rydberg constant . If we included, for instance, gravitational phenomena, we would have to use the gravitational constant G, which is independently measured, though it has a very large uncertainty (that is why NSF had the so-called “Big-G” Challenge).

In the following, we will restrict ourselves to electric, magnetic and mass quantities whose uncertainties reduce to the ones of and .

Here we use the new function Around to express values with the uncertainties of and .


\[Alpha] = 
 Around @@ 
    EntityProperty["PhysicalConstant", "StandardUncertainty"]}]
R\[Infinity] = 
 Around @@ 
    "RydbergConstant"][{EntityProperty["PhysicalConstant", "Value"], 
    EntityProperty["PhysicalConstant", "StandardUncertainty"]}]

The current (CODATA 2014) relative uncertainty of is about and the one from is about . Powers of have a slightly larger uncertainty.


relativeUncertainty[Around[x_, \[Delta]_]] := \[Delta]/x
relativeUncertainty[Quantity[a_Around, u_]] := relativeUncertainty[a]


    Style[{"combinations", "rel. uncertainty"}, Italic]]},
  (relativeUncertainty /@ {\[Alpha], 1/\[Alpha], \[Alpha]^2, 
      R\[Infinity], R\[Infinity]/\[Alpha]^2}) //
   With[{\[Alpha] = 
       Entity["PhysicalConstant", "FineStructureConstant"], 
      R\[Infinity] = Entity["PhysicalConstant", "RydbergConstant"]},
     Transpose[{{\[Alpha], 1/\[Alpha], \[Alpha]^2, R\[Infinity], 
        R\[Infinity]/\[Alpha]^2}, NumberForm[#, 2] & /@ #}]] &], 
 Dividers -> All, Background -> {Automatic, {LightGray, {None}}}]

Here is a plot of the base-10 log of the relative uncertainty of as a function of and . For small powers, the relative uncertainty of the product depends only weakly on the exponents and . The plot shows that the dependence of the uncertainty of is dominated by , the exponent of the fine-structure constant. This observation is explained by the fact that the uncertainty of the Rydberg constant is 50 times smaller than the one of the fine-structure constant.


 Plot3D[relativeUncertainty[α^a R∞^b],{a,0, 4},{b,0,4 }, 
                PlotPoints -> 20,MaxRecursion->1,
                 Mesh -> None, AxesLabel-> {"a","b",None},       

To compute the uncertainties of various constants in the new SI, we will use the following steps:

  • Retrieve equivalent representations for physical constants available from the "PhysicalConstant" entity domain.

These identities between physical constants are laws of physics, and as such, should hold in the old as well as in the new SI.

  • Use the relations as a set of algebraic relations and use variable elimination techniques to express a constant through a combination of the seven base constants of the new SI, the fine-structure constant and the Rydberg constant .

These are the nine constants that we will allow in the definiens of the constant under consideration. (Technically there are 10 constants in the list, but because of the simple rescaling relation between and there are nine “different” constants in this list.)

basicConstantNames= Join

basicConstantNames = 
 Join[Last /@ SIExactConstants, {"ReducedPlanckConstant"},
"FineStructureConstant", "RydbergConstant"}]/pre>

The "PhysicalConstant" entity domain has a lot of information about relations between physical constants. For instance, here are equivalent forms of the four constants that currently are measured and soon will be defined to have exact values.

     Style[{"constant", "symbol", "equivalent forms"}, Italic]]}, 
   idTable = {#, FromEntity[#], 
         EntityProperty["PhysicalConstant", "EquivalentForms"]], 
          Quantity[_] | 
           "AtomicSpecificHeatConstant", \[Infinity]] &]} & /@ \
{Entity["PhysicalConstant", "PlanckConstant"], 
      Entity["PhysicalConstant", "BoltzmannConstant"], 
      Entity["PhysicalConstant", "ElementaryCharge"], 
      Entity["PhysicalConstant", "AvogadroConstant"]}] /. 
  Quantity[1, s_String] :> Quantity[None, s], Dividers -> All, 
 Background -> {Automatic, {LightGray, {None}}}]

Within the precision of measured values, all these identities hold right now. Here is a quick numerical check for the alternative forms of the Planck constant. But the concrete numerical value, especially the uncertainty, depends on the actual form of the representation. Using Around[], we can conveniently compute the resulting uncertainties.


toAround[expr_] := expr /. Quantity[x_, u_] :>
    x (u /. s_String :> ToEntity[Entity["PhysicalConstant", s]][
        "PhysicalConstant", "Value", {"Uncertainty" -> "Around"}]] )


Column[Column[{#1, Style[toAround[#1], 10], UnitSimplify@
      Activate[ toAround[#1]]}] & /@ Last[First[idTable]], 
 Dividers -> All]

Here is a graphical representation of the resulting uncertainties of the various representations. The very large uncertainty of the tenths representation can be traced back to the large uncertainty in the second radiation constant.


ListPlot[MapIndexed[Callout[{ #1[[2]], #2[[1]]}, #1[[3]] /. 
     Quantity[1, s_String^e_. /; e >= 0] :> Quantity[None, s]] &,
  Sort[Function[f, With[{a = UnitSimplify@
         (Activate[ toAround[f]] - 
           Quantity[165651751/(5/2 10^41), "Joules" "Seconds"] )},
                {relativeUncertainty[a], a, f}]] /@ 
 FrameLabel -> Automatic, Frame -> True, Axes -> True, 
 AspectRatio -> 1]

And, again within the uncertainty of the constants, these relations should continue to hold after the redefinition. Now which of these representations can best be used after the redefinition to minimize the uncertainties? Maybe none of these given equivalents is optimal and by combining some of these representations a better one (meaning one with smaller resulting uncertainty) could be constructed.

Now for the algebraic elimination step, we convert the constants occurring in the equivalent entities (this is easily possible because the second arguments of Entity["PhysicalConstant",.] and Quantity[1,.] are aligned). The reason we use entities rather than quantities in the following computation is twofold: first, the entities are nice, easy-to-read representations; and second, algebraic functions (like GroebnerBasis) do not look inside quantities to determine the nature of their first argument.


quantitiesToEntities[expr_] := Activate[expr//. (Quantity[x_,u_] :> x (u /. s_String:> ToEntity[Quantity[1, s]]))/.
 Entity["PhysicalConstant","ReducedPlanckConstant"] :> Entity["PhysicalConstant","PlanckConstant"]/(2Pi)]


toEntityEquation[lhs_, rhs_] := quantitiesToEntities[lhs]==quantitiesToEntities[rhs]


entitiesToQuantities[expr_] := expr//.Entity["PhysicalConstant",c_]:> Quantity[1,c]

Then we make all identities polynomials. The latter step means: (1) to subtract the left-hand side from the right-hand side; and (2) that no fractional powers (e.g. square roots) of constants appear any longer. We realize this transformation to a polynomial by looking for all fractional exponents and finding the LCM of all their denominators.


toPolynomial[a_==b_] := 
Cases[b,(_?(MemberQ[#,_Entity,{0, ∞}]&))^e_.:>e, ∞]]},

Here is one of the preceding equations that contains constants to a fractional power.


toEntityEquation[Quantity[1, "ElementaryCharge"], 1/Sqrt[3]\!\(\*
SyntaxForm->"*"]\)Sqrt[(Quantity[1, ("BoltzmannConstant")^2])\!\(\*
SyntaxForm->"*"]\)(Quantity[1, 1/("LorenzNumber")])]]

After polynomialization, we have a multivariate polynomial in the three occurring constants. These polynomials have to vanish identically.



The next table shows the function toPolynomial applied to the equivalent forms shown earlier for the elementary charge. After canonicalizing to , some of the resulting polynomials are identical.


    Style[{"identity", "polynomial form"}, Italic]]}, 
  With[{lhs = idTable[[3, 2]], eforms = idTable[[3, 3]]},
            {lhs == #, toPolynomial[toEntityEquation[lhs, #]]} & /@ 
 Dividers -> All, Background -> {Automatic, {LightGray, {None}}}]

Now, given any physical constant (not one of the constants used in defining the new SI), we retrieve a sufficient amount of equivalent forms to form a set of equations.


getAllRelations[constant : Entity["PhysicalConstant", c_]] := 
 Module[{eforms, eforms2, eformsA, eformsB, missing},
  eforms = constant[{"Quantity", "EquivalentForms"}];
  missing = 
   Complement[Cases[Last[eforms], _String, \[Infinity]], 
  eforms2 = Entity["PhysicalConstant", #][
                              {"Quantity", "EquivalentForms"}] & /@ 
  eformsA = Flatten[Function[{c1, cList},
           toEntityEquation[c1, #] & /@ cList] @@@ 
     Join[{eforms}, eforms2]];
  eformsB = toPolynomial /@ eformsA;
  Select[eformsB, FreeQ[#, _Quantity, \[Infinity]] &]  // 

Here is the list of resulting polynomial equations for expressing the elementary charge.

relationList= getAllRelations

relationList = 
 getAllRelations[Entity["PhysicalConstant", "ElectronMass"]]

We will express all uncertainties in terms of the uncertainties of and . Just these two constants do suffice to express the uncertainty of many physical constants. And because their uncertainties are independent from each other and because the uncertainties are quite small, these two approximately known constants are best suited to express the uncertainty-optimized version of many physical constants. And, of course, we allow all seven exact constants from the new SI; because they are exact quantities, their presence will not change uncertainties.


alpha = Entity["PhysicalConstant", "FineStructureConstant"];
rydbergR = Entity["PhysicalConstant", "RydbergConstant"] ;

The main work of expressing a given constant through the SI constants and and will be done by the function GroebnerBasis. The option setting MonomialOrder→ EliminationOrder is the crucial step that removes all physical quantities “not wanted,” leaving one polynomial equation with the exactly defined constants and (if needed) the fine-structure and the Rydberg constants.


minimalEquation[constant_] := 
 Module[{relationList, keep, remove, gb},
  relationList = getAllRelations[constant];
  keep = Join[SIExactConstants, {constant, alpha, rydbergR}];
  remove = 
   Complement[Union[Cases[relationList, _Entity, \[Infinity]]], 
  gb = GroebnerBasis[relationList, keep, remove ,
    MonomialOrder -> EliminationOrder];
  positivity = And @@ ((# > 0) & /@ Cases[gb, _Entity, \[Infinity]]);
  If[gb =!= {}, 
   constant == (constant /.
          First[gb] == 0 \[And] positivity, constant][[
         1]] //
        Simplify[#, positivity] &)), {}]

Carrying out the constant-elimination process on the electron mass, we obtain .


minimalEquation[Entity["PhysicalConstant", "ElectronMass"]]



The uncertainty of this expression comes from the term . We define a function that extracts the term that causes the uncertainty.


uncertaintyFactor[expr_] := 
 If[FreeQ[expr, alpha | rydbergR, \[Infinity]], "exact", 
   (expr /. 
        Except["FineStructureConstant" | "RydbergConstant"]] :> 
       1) //.
    a_?NumericQ e_Entity^exp_. :> e^exp] /. e_Entity :> FromEntity[e]


 2 Entity["PhysicalConstant", "PlanckConstant"] Entity[
   "PhysicalConstant", "RydbergConstant"])/(
 Entity["PhysicalConstant", "FineStructureConstant"]^2 Entity[
   "PhysicalConstant", "SpeedOfLight"])]

For a more compact display, we define a function that returns the equivalent form, and the old and new uncertainties as a row.


newSIRow[a_ == b_] := 
 With[{dom = uncertaintyFactor[b]},
  {a, entitiesToQuantities[a] /. Quantity[1, u_] :> Quantity[None, u], 
   entitiesToQuantities[b] /. Quantity[1, u_] :> Quantity[None, u], 
    Which[a["StandardUncertainty"] === Missing["Exact"], 0,
                a["StandardUncertainty"] === Missing["NotAvailable"],
         UnitConvert[a["Value"]]]], 2],
    NumberForm[a["StandardUncertainty"]/a["Value"], 2]],
    relativeUncertainty[dom /. HoldPattern[Quantity[x_, p_]] :>
       x (p /. {"FineStructureConstant" -> \[Alpha],
                            "RydbergConstant" -> R\[Infinity]})], 2], 

We end with a table of the old and new uncertainties for more than a dozen physical constants. We select this list as a representative example; other constants could be treated in a similar fashion (this would potentially require adding further imprecise constants to be preserved, such as the gravitational constant or parameters of the standard model).


constantList = {Entity["PhysicalConstant", "MagneticConstant"], 
   Entity["PhysicalConstant", "ElectricConstant"], 
   Entity["PhysicalConstant", "VacuumImpedance"], 
   Entity["PhysicalConstant", "JosephsonConstant"], 
   Entity["PhysicalConstant", "VonKlitzingConstant"],
   Entity["PhysicalConstant", "MolarGasConstant"], 
   Entity["PhysicalConstant", "FaradayConstant"], 
   Entity["PhysicalConstant", "ClassicalElectronRadius"], 
   Entity["PhysicalConstant", "ElectronMass"], 
   Entity["PhysicalConstant", "BohrRadius"], 
   Entity["PhysicalConstant", "BohrMagneton"],
   Entity["PhysicalConstant", "MolarPlanckConstant"], 
   Entity["PhysicalConstant", "ElectronComptonFrequency"], 
   Entity["PhysicalConstant", "SchottkyNordheimConstant"]};

Combining the rows into a table yields the following result for optimal representations of these constants within the new SI.


TextGrid[Prepend[newSIRow[minimalEquation[#]] & /@ constantList,
   Style[#, Gray, Italic] & /@ {"constant", "symbolc", "value", 
     "new SI\nuncertainty", "new SI\nuncertainty\ncause"} ] /.
  "exact" :> Style["exact", Gray], Dividers -> All, 
    Background -> {None, {{LightGray, Sequence @@ Table[None, 15]}}}]

This was the table we set out to derive and we succeeded in deriving it. Note the appearance of in the numerator and denominator of and in such a way that after cancellation the product becomes . A similar list can be found at the bottom of the Wikipedia page about the redefinition of the SI units.

Now we can look forward to World Metrology Day 2019 for a fundamentally better world through fundamental constants.

Mathematica 12 significantly extends the reach of Mathematica and introduces many innovations that give all Mathematica users new levels of power and effectiveness.

Buy now!


Join the discussion

!Please enter your comment (at least 5 characters).

!Please enter your name.

!Please enter a valid email address.


  1. Michael Trott constantly surprises me with the depth of his thinking.

  2. A typo with the Henry (remember H = kg m^2/(m^2 A^2)) three lines above “Computing the Table of Uncertainty-Optimized Forms”

  3. https://reference.wolfram.com/language/ref/entity/PhysicalConstant.html

    this page could not be found – a dead link in the search for “Hyperfine”

  4. The SI Brochure definitions are forward definitions, i.e. the units they mention (s, m, A, kg, …) are still unknown. It would be interesting to revert the SI system to its right-hand side units. E.g.

    1 m = (656616555/21413747) Entity[“PhysicalConstant”, “SpeedOfLight”]/
    Entity[“PhysicalConstant”, “Cesium133HyperfineSplittingFrequency”]

    and if I had the job of a greengrocer, I had now to know that

    1 kg = 1.4755214 10^40 Entity[“PhysicalConstant”, “PlanckConstant”] Entity[“PhysicalConstant”, “Cesium133HyperfineSplittingFrequency”]
    /Entity[“PhysicalConstant”, “SpeedOfLight”]^2

    By the way, Michael, possibly you can please here add a reference how one would detect, whether a mass is equal to 1 kg (i.e. without the inheritage from a gauge mass in Paris),

  5. Would be good to see a few examples of calculations involving these constants along with an estimation of propagated error. Eg Dirac Energy for ionization energy of atomic hydrogen:

    ((mass of proton)*(mass of electron))/((mass of proton)+(mass of electron))*(velocity of light)*(1-sqrt(1-(fine structure constant)^2))/(Planck Constant)

    Currently I can’t get any serious level of precision for this calculation. Expected answer should be 109679.04356475 per cm.

  6. A little doubt: Mathematica 12 already works with the new SI constant system or it still uses the old one? For example, if I intend to use the magnetic constant in an equation, Mathematica 12 will return its old (exact) value or the new (approximated) value? The user will be allowed to choose between the two systems? Thank you in advance.

  7. Please check the current dataset value of the elementary charge:

    In[1]:= Quantity[“ElementaryCharge”] 10^19 // UnitConvert // First

    Out[1]= 80108817/50000000

    In[2]:= % // N[#, 10] &

    Out[2]= 1.602176340

    whereas the correct exact value (times 10^19) is:

    In[3]:= 801088317/500000000 // N[#, 10] &

    Out[3]= 1.602176634

    which affects all the corresponding unit conversions.