Как умножить 2 float числа не используя знак умножения?
Как умножить 2 float числа не используя знак умножения?
Числа могут быть любые.
let a = 0.1;
let b = 0.2;
Ответы (2 шт):
exp(ln(a) + ln(b))
Тело сообщения должно содержать не менее 30 символов; вы ввели 19.
Способов несколько
использование деления
const res = a / (1 / b);
Способ универсальный по сравнению со способом 2), НЕДОСТАТОК - если b = 0, то способ не работает
используя логарифмы и экспоненту
const res = Math.exp(Math.log(a) + Math.log(b))
2.1) аналогично 2, но можно использовать степень и логарифм по основанию 10:
const res = Math.pow(10, Math.log10(a) + Math.log10(b))
2.2) аналогично 2, но можно использовать степень и логарифм по основанию 2:
const res = Math.pow(2, Math.log2(a) + Math.log2(b))
вообще тут можно много вариантов с логарифмами привести, ведь можно использовать и логарифм с произвольным основанием
Но есть НЕДОСТАТОК - невозможно работать с отрицательными числами и 0
- использовать тангенсы:
любое число можно представить как тангенс угла a = tan(x), поэтому можно воспользоваться тригонометрическим тождеством:
tan(x + y) = (tan(x) + tan(y)) / (1 - tan(x)*tan(y))
таким образом можно получить
1 - (a + b) / (tan(atan(a) + atan(b)) = a * b
т.е.
res = 1 - (a + b) / (Math.tan(Math.atan(a) + Math.atan(b))
НЕДОСТАТОЕ: вариант, когда tan(atan(a) + atan(b) = 0 ну и опять из-за того, что функции высчитываются через ряды плывет точность (чтуь-чуть)