Resistors are often chosen in pairs. The voltage divider is a common example. Another example is the input to feedback pair used in an operational amplifier. There is nothing inherently difficult in selecting these resistor pairs as a simple division will reveal the ratio. However, it’s a challenge to locate the best available ratio as there are so many combinations to test.
For an example, consider an inverting opamp with a desired gain of 5. We know that the resistors have a ratio of 5 : 1 as the inverting op amp’s gain is defined as:
Gain = \dfrac{R_F}{R_{In}}
Intuitively, we would select a simple resistor combination of 5 kΩ to 1 kΩ. In practice, we are in trouble because 5 kΩ is not a standard value. In fact, DigiKey with its vast array of half a million throughhole resistors does not sell a ¼ W, 5%, 5 kΩ, throughhole resistor!
It’s not a standard component. Here: go look. You will find the closest available resistor is 1/2 W.
Instead, we must select from standard valued components to provide the desired 5 : 1 ratio. We can find the desired ratio in the 5% tolerance series by selecting 7.5 kΩ and 1.5 kΩ resistors. This is the only viable pair contained within the 5% tolerance standard values.
There is nothing simple about selecting these resistor pairs, as we need to hunt through 300 potential combinations (assuming 1 : 1 ratios are allowed). The process becomes more unwieldy when we move to 1% and is even worse for the 0.5% tolerance resistors.
This article presents practical methods to help you select the appropriate resistor pairs. It introduces a matrix method for the 5% tolerance values. It then presents a crude computer program to help you select resistor pairs from the standard valued 1% and 0.5% parts.
Standard Values
Resistors and other devices such as capacitors and inductors are binned using a logarithmic numbering system. The bins are sized with consideration for the tolerance. For example, the 5% parts are defined by the E24 series bins. With this system there are 24 bins per decade:
E24 series: 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1
To better understand, consider the 3.0 Ω resistor and its nearest neighbors:

for a 2.7 Ω 5% resistor: 2.565 < R < 2.835

for a 3.0 Ω 5% resistor: 2.850 < R < 3.150

for a 3.3 Ω 5% resistor: 3.135 < R < 3.465
As we can see, the bins are laid out on a number line with each bin centered at the E24 number extending +/ 5%. The numbers are chosen so that there is little overlap and few gaps between bins.
Components with tighter tolerance are available in 1%, 0.5, and better. The 1% resistors are available as the E96 with the 0.5% tolerance parts from the E192 series:
E96 series: 1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74, 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09, 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49, 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76
E192 series: 1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09, 1.10, 1.11, 1.13, 1.14, 1.15, 1.17, 1.18, 1.20, 1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32, 1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45, 1.47, 1.49, 1.50, 1.52, 1.54, 1.56, 1.58, 1.60, 1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76, 1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93, 1.96, 1.98, 2.00, 2.03, 2.05, 2.08, 2.10, 2.13, 2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34, 2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58, 2.61, 2.64, 2.67, 2.71, 2.74, 2.77, 2.80, 2.84, 2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12, 3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44, 3.48, 3.52, 3.57, 3.61, 3.65, 3.70, 3.74, 3.79, 3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17, 4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59, 4.64, 4.70, 4.75, 4.81, 4.87, 4.93, 4.99, 5.05, 5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56, 5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12, 6.19, 6.26, 6.34, 6.42, 6.49, 6.57, 6.65, 6.73, 6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41, 7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16, 8.25, 8.35, 8.45, 8.56, 8.66, 8.76, 8.87, 8.98, 9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88
Returning back to our inverting op amp with a gain of 5, we are still in an impractical situation, as there are no 5 kΩ resistors in any of the standard preferred part numbers.
Grid Search
We can select resistor pairs using a graphical method as shown in the matrix below. Here, the E24 values appear for each row and each column. Each cell presents the ratio between the resistors. We see the 1:1 ratio on the diagonal. Ratios greater than 1:1 are in the upper part of the chart. Ratios less than 1:1 are grayed out in the lower portion of the chart. We should avoid the lower portion of this chart as it contains 2 significant figures while the upper contain three. As an example, consider the 8.2 vs 1.1 cell. The corresponding ratio is 7.45. However, the 1.1 vs 8.2 cell has a ratio of 0.13. The number are inverses of each other, but this isn’t immediately obvious when comparing the 2 to 3 the significant figures number.
Note that this graphical method does require a bit of mental gymnastics. Like using an old slide rule, we must keep track of the tens place independent of the chart. We must also freely flip the ratio so that the number is greater than 1. As an example, suppose we want a ratio of 3 : 50. This requires several steps:
 keep track of the tens place and change the ratio from 3 : 50 to 3 : 5.
 flip the ratio to 5 : 3.
 search the ratio closest to 1.67
 select E24 values of 2 and 1.2 as the closest match
 flop the number to 1.2 and 2
 correct for power of 10 as 1.2 : 20
Tech Tip: Be mindful of significant figures. The E24 series of resistors have two significant figures. Take the three significant figures in the chart with a grain of salt. The resulting resistor pairs are limited to 2 significant numbers especially when we consider the best and worstcase tolerance for each pair.
Program Search
The graphical method is better than performing the calculations by hand. Yet, it is still prone to error as it is easy to miss the best number(s) in the sea of possibilities. We certainly could construct similar tables for the E96 and E192 values. However, their size and limited human abilities make them impractical. A better solution is to write a program.
The end of this note contains a rudimentary program written in C. This was designed to be used with an online compiler such as OnlineGDB.
To operate the program, enter the desired ratio using floating point numbers and then, press run. In this example we continue our search for a 3 : 50 ratio. Using the same mental effort, we flip the numbers and take care of the decimal place manually by searching for a 5.0 : 3.0 ratio. The program suggests several solutions:
 E24: 1.2 : 20
 E96: avoid
 E192: 1.2 : 20 or 1.26 : 21.0
Conclusion
I trust this information was useful and will save you time in the future. Who knew that resistor selection was so complicated. Actually, we should talk about the impact of tolerance on the chosen pairs. But we will save that for another time.
Please leave your comments and suggestions below. Also, if you take the time, please attach your improvements to the program.
Best Wishes,
APDahlen
#include <stdio.h>
#include <math.h>
int main(){
// CAUTION: Use floats such as 5.0/3.0 or else the program defaults to interger math.
double desired_ratio = 5.0/3.0;
double E_24_R_values[] = {1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0,
2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3,
4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1};
double E_96_R_values[] = {1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18,
1.21, 1.24, 1.27, 1.30, 1.33, 1.37, 1.40, 1.43,
1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74,
1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10,
2.15, 2.21, 2.26, 2.32, 2.37, 2.43, 2.49, 2.55,
2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09,
3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74,
3.83, 3.92, 4.02, 4.12, 4.22, 4.32, 4.42, 4.53,
4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49,
5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65,
6.81, 6.98, 7.15, 7.32, 7.50, 7.68, 7.87, 8.06,
8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76};
double E_192_R_values[] = {1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09,
1.10, 1.11, 1.13, 1.14, 1.15, 1.17, 1.18, 1.20,
1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32,
1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45,
1.47, 1.49, 1.50, 1.52, 1.54, 1.56, 1.58, 1.60,
1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76,
1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93,
1.96, 1.98, 2.00, 2.03, 2.05, 2.08, 2.10, 2.13,
2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34,
2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58,
2.61, 2.64, 2.67, 2.71, 2.74, 2.77, 2.80, 2.84,
2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12,
3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44,
3.48, 3.52, 3.57, 3.61, 3.65, 3.70, 3.74, 3.79,
3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17,
4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59,
4.64, 4.70, 4.75, 4.81, 4.87, 4.93, 4.99, 5.05,
5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56,
5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12,
6.19, 6.26, 6.34, 6.42, 6.49, 6.57, 6.65, 6.73,
6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41,
7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16,
8.25, 8.35, 8.45, 8.56, 8.66, 8.76, 8.87, 8.98,
9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88};
int i, j;
double ratio = 1;
double best_delta = 1;
double delta;
printf("Search for the resistor pair closest to %f\n\n", desired_ratio);
best_delta = 1;
printf("For the E24 series:\n");
for (i = 0; i < 24; i++){
for (j = 0; j < 24; j++){
ratio = E_24_R_values[i] / E_24_R_values[j];
delta = fabs(desired_ratio  ratio);
if (delta <= best_delta){
best_delta = delta;
printf("\tbest_delta = %f for R1 = %f, and R2 = %f\n", ratio, E_24_R_values[i] , E_24_R_values[j] );
}
}
}
best_delta = 1;
printf("\nFor the E96 series:\n");
for (i = 0; i < 96; i++){
for (j = 0; j < 96; j++){
ratio = E_96_R_values[i] / E_96_R_values[j];
delta = fabs(desired_ratio  ratio);
if (delta <= best_delta){
best_delta = delta;
printf("\tbest_delta = %f for R1 = %f, and R2 = %f\n", ratio, E_96_R_values[i] , E_96_R_values[j] );
}
}
}
best_delta = 1;
printf("\nFor the E196 series:\n");
for (i = 0; i < 192; i++){
for (j = 0; j < 192; j++){
ratio = E_192_R_values[i] / E_192_R_values[j];
delta = fabs(desired_ratio  ratio);
if (delta <= best_delta){
best_delta = delta;
printf("\tbest_delta = %f for R1 = %f, and R2 = %f\n", ratio, E_192_R_values[i] , E_192_R_values[j] );
}
}
}
return 0;
} // end main