Function Repository Resource:

ESeriesValues

Source Notebook

Find an optimal combination of E-series values

Contributed by: Julien Kluge

ResourceFunction["ESeriesValues"][value]

returns the closest E6 series number to value.

ResourceFunction["ESeriesValues"][value, series]

returns the closest series number to value for the specified series.

ResourceFunction["ESeriesValues"][All, series]

returns the complete E-series specified by series between 1 inclusive and 10 exclusive.

ResourceFunction["ESeriesValues"][value, series, count]

returns the closest series number to value for the specified series using count many elements.

Details and Options

ResourceFunction["ESeriesValues"] helps to find values or combination of values in the E series of preferred numbers. Those logarithmically spaced number lists are used mainly as values for common electrical components like resistors, capacitors, inductors and other. The standard definitions (IEC 60063:2015) include the series E3, E6, E12, E24, E48, E96 and E192. The number of which designates the number of values included in the series. For example, E6 specifies 6 standard values: 1.0, 1.5, 2.2, 3.3, 4.7, 6.8. So any of those values times an integer exponent base 10 gives any valid E6-series value. Thus 680, 2200 or 0.47 are all members of the E6-series.
ResourceFunction["ESeriesValues"] can be used to find optimal resistor, capacitor, etc. values or optimal configurations of multiple elements given a desired target value.
ResourceFunction["ESeriesValues"] returns an E-series number when called in the one or two argument form.
ResourceFunction["ESeriesValues"] in its three argument form attempts to find the optimum combination of elements closest to the desired value.
ResourceFunction["ESeriesValues"] in the three argument form returns a list of found optimal/near-optimal solutions each containing the optimized value val, the configuration config highlighting how to set the elements with them enumerated C[1]…C[n], and a rule list which gives the the individual series values C[i]->vali.
The configuration returned by the three argument form of ResourceFunction["ESeriesValues"] is a string expression showing a parallel combination with a pipe symbol "|" or a serial combination with a plus "+" and nesting with brackets. So, for example, (C[1]|(C[2]+C[3])) shows an element C[1] being in parallel with a serial combination of elements C[2] and C[3].
ResourceFunction["ESeriesValues"] is not guaranteed to always find the global optimum, nor to always find all optimum combinations if there are more than one.
The argument series can be specified as:
"E6"string with an "E" prefix and a number describing the series
dinteger specifying the series
{v1,v2,…}list describing the series
Supported options are:
"ExtraExponent"1how many extra exponents intervals the search depth will use
GenerateConditionsFalseFalse prints only the best combinations, True returns all optimums of all possible given configurations of elements
"MinValue"10^-3minimum value searched for
"MaxValue"10^7maximum value searched for

Examples

Basic Examples (3) 

Find the E6-series value closest to a desired value:

In[1]:=
ResourceFunction["ESeriesValues"][6150]
Out[1]=

Find the E192-series value closest to a desired value:

In[2]:=
ResourceFunction["ESeriesValues"][6150, "E192"]
Out[2]=

Find a three element solution in the E6-series for a desired value:

In[3]:=
ResourceFunction["ESeriesValues"][6150, "E6", 3]
Out[3]=

Scope (4) 

An optimal solution might not always be found:

In[4]:=
ResourceFunction["ESeriesValues"][4186, "E6", 3] // N
Out[4]=

Multiple solutions with equal performance can be found:

In[5]:=
ResourceFunction["ESeriesValues"][4186, "E12", 3] // N
Out[5]=

Some elements might be superfluous (neutral element in serial combination is 0) in series:

In[6]:=
ResourceFunction["ESeriesValues"][220, "E3", 3] // N
Out[6]=

Some elements might be superfluous (neutral element in parallel combinations is ∞) in parallel:

In[7]:=
ResourceFunction["ESeriesValues"][230, "E3", 3] // N
Out[7]=

Specifying All as the first argument always returns the full specified series-factors:

In[8]:=
ResourceFunction["ESeriesValues"][All, "E24"] // N
Out[8]=

Options (5) 

Some optimal values might only be found if "ExtraExponent" is increased:

In[9]:=
ResourceFunction["ESeriesValues"][4115, "E12", 3, "ExtraExponent" -> #] & /@ {1, 2} // Grid
Out[9]=

Increasing "ExtraExponent" also sharply increases computation time:

In[10]:=
AbsoluteTiming[
   ResourceFunction["ESeriesValues"][4115, "E6", 4, "ExtraExponent" -> #];] & /@ {1, 2}
Out[10]=

Setting GenerateConditions to true yields all solutions to all element combinations sorted by accuracy:

In[11]:=
ResourceFunction["ESeriesValues"][4115, "E3", 4, GenerateConditions -> True] // Grid
Out[11]=

Allow smaller element values with "MinValue":

In[12]:=
ResourceFunction["ESeriesValues"][3*10^-6, "E3", 2, "MinValue" -> 10^-6]
Out[12]=

Allow bigger element values with "MaxValue":

In[13]:=
ResourceFunction["ESeriesValues"][62*10^6, "E12", 2, "MaxValue" -> 10^8]
Out[13]=

Applications (2) 

Some voltage references need very specific resistance divider ratios to get to a desired output voltage. One such known ratio, for example is 13:1 for LT1000 style references. While 1kΩ resistors are plenty available with sub-ppm temperature slopes, 13k is way harder to get because low-ppm resistors are usually available only in low E-series like E12 or even E6/E3. A resistance of 13kΩ is however easy to compose with two E12, three E6 or four E3 resistors instead:

In[14]:=
Grid[{
  ResourceFunction["ESeriesValues"][13000, "E12", 2],
  ResourceFunction["ESeriesValues"][13000, "E6", 3],
  ResourceFunction["ESeriesValues"][13000, "E3", 4]
  }, Frame -> All]
Out[14]=

The configuration strings can also be converted to expressions and used with Around to estimate uncertainties of the dividers for all resistance tolerances being 0.1%. This shows the first E6 solution to be the most precise:

In[15]:=
solution = {
     #1,
     ToExpression[#2] //. {Verbatim[Alternatives][args__] :> 1/Total[1/{args}]},
     #3 /. {n_?NumericQ :> Around[n, n*0.1/100], s_String :> ToExpression[s]}
     } & @@@ Flatten[{
     ResourceFunction["ESeriesValues"][13000, "E12", 2],
     ResourceFunction["ESeriesValues"][13000, "E6", 3],
     ResourceFunction["ESeriesValues"][13000, "E3", 4]
     }, 1];
Grid[
 {AroundReplace[#2, #3], FullSimplify@#2, #3} & @@@ solution,
 Frame -> All]
Out[16]=

Properties and Relations (1) 

The user can supply a custom series as a list:

In[17]:=
ResourceFunction["ESeriesValues"][5643.21, {1.0, 2.0, 3.5, 5.0, 8.0},
  2]
Out[17]=

Possible Issues (1) 

Non standard E-series specifications will yield a warning but will work:

In[18]:=
ResourceFunction["ESeriesValues"][5643.21, "E100", 2]
Out[18]=

Neat Examples (2) 

Compare three E3 elements with two E6 and one E192 element all with 0.1% tolerance between 1k and 2k:

In[19]:=
range = Range[1000, 2000];
tolerance = 0.1/100;
Histogram[{
   # - ResourceFunction["ESeriesValues"][#, "E3", 3][[1, 1]] & /@ range,
   # - ResourceFunction["ESeriesValues"][#, "E6", 2][[1, 1]] & /@ range,
   # - ResourceFunction["ESeriesValues"][#, "E192"] & /@ range
   } // N, ChartLegends -> {"3x E3", "2x E6", "1x E192"}]
Out[21]=

The E-series are uniformly distributed in log-space:

In[22]:=
series = {"E3", "E6", "E12", "E24", "E48", "E96", "E192"};
ListLogPlot[ResourceFunction["ESeriesValues"][All, #] & /@ series, PlotLegends -> series]
Out[23]=

Publisher

Julien Kluge

Requirements

Wolfram Language 13.0 (December 2021) or above

Version History

  • 1.0.0 – 06 February 2026

Related Resources

Author Notes

The longer outputs are intentionally string based to allow for easier viewing. The function output will likely be used directly in other programs or as one-off computations. Formatting the output as expressions would make it hard to see the actual non-simplified configuration and to follow operator precedence.

License Information