Just a quick reminder to myself in case the E12 resistors were not – hypothetically, of ourse – ordered before the lab.
Resistors from the E6 and E12 series have values based on their tolerances. Resistors from E6 have a tolerance of 20% and E12 a tolerance of 10%. All values from one series is reused in next, ie., all values in E6 are found in E12. The number of available values in next series are doubled, hence E6 to E12.
The E6 values are the following: 1.0, 1.5, 2.2, 3.3, 4.7, 6.8 times some order of magnitude.
The E12 values are the following: 1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2.
The values in the series are chosen such that the maximum value (based on the tolerance) does not overlap with the minimum next value in the same series. For example, from E6, 2.2 + 20% = 2.2 + 0.44 = 2.64 should be less than or equal to 3.3 – 20% = 3.3 – 0.66 = 2.64, and so on. There are some deviations from the rule across the series.
The values are taken from a table, and mathematically defined as

where m is an integer (0, …, 6) and n is then 0, … , -1+3*2^m. Or using MATLAB code to generate the E3, E6, and E12 values:
for m = 0:2
n = 0:(-1+3*2^m);
0.1*round(10.^(1+n/(3*2^m)))
end
which gives us (notice that some values are not exactly the same – why? – as in the series)
1.0, 2.2, 4.6
1.0, 1.5, 2.2, 3.2, 4.6, 6.8
1.0, 1.2, 1.5, 1.8, 2.2, 2.6, 3.2, 3.8, 4.6, 5.6, 6.8, 8.3
Now, the original question was: how to generate the E12 values using only E6 components (ignore tolerances for now). Every second value is obvious, just pick the same, but what about 1.2, 1.8, 2.7, 3.9, 5.6, and 8.2?
My approach was to use a network as below and in the right-hand configuration pick values from -1,0,1 decades away (say 100, 1000, 10000) Ohms to see if I could form the E12 values. The topology offers me series + parallel in some different flavours.

Then, Operation Overkill started and rather than looping through all possible options, I used a monte carlo simulation approach and picked the results that gave me minimum errors. With a nodal analysis of the network we can quite easily formulate a generic expression. The code uses values from the E6 series as well as “0” (1e-10) and “infinity” (1e10) which then mimics a short or an open circuit/branch.
This is what was obtained:
1.2 1.20 0.00 1.0 1.5 inf 1.0 1.5
1.8 1.80 0.0519 330.0 0.47 0.068 3.3 2.2
2.7 2.70 0.8993 33.0 0.22 15.0 0.22 3.3
3.9 3.90 0.00 6.8 6.8 0.0 1.0 1.0
5.6 5.60 0.00 10.0 10.0 0.0 1.0 1.5
8.2 8.20 0.0266 47.0 0.0 10.0 0.10 470.0
with the third column being the error (in percent), ie., deviation from the desired value. For example,
1.2 is mimicked by (1 + 1) // ( 1.5 + 1.5) such that 2*3/(2+3) = 6/5 = 1.2.
3.9 is obtained using 6.8//6.8 + 1.0//1.0.
5.6 is given by 10//10 + 1//1.5.
1.8, 2.7, and 8.2 required more complicated networks to get down to reasonable (wrt reasonable, see Per’s comments below) error levels.
For each E12 value 200*1500000 Monte Carlo points were tested and the ones with minimum error/deviation from desired value were picked.


