JS.39 · Радиотехника
Задача
По желаемому сопротивлению найти ближайший номинал E24.
Алгоритм
Для каждого значения ряда во всех декадах сравнивается логарифм отношения к желаемому.
Исходный код
// Ближайший номинал ряда E24
const E24 = [10,11,12,13,15,16,18,20,22,24,27,30,33,36,39,43,47,51,56,62,68,75,82,91];
function nearestE24(v) {
let best = v, bd = Infinity;
for (let d = -2; d <= 9; d++) for (const e of E24) {
const val = e * 10 ** d, rd = Math.abs(Math.log(val / v));
if (rd < bd) { bd = rd; best = val; }
}
return best;
}
console.log('4700 ->', nearestE24(4700));
console.log('3300 ->', nearestE24(3140));
Пояснения
Логарифмическая метрика корректнее абсолютной разности для номиналов разных порядков.