Как умножить 2 float числа не используя знак умножения?

Как умножить 2 float числа не используя знак умножения?

Числа могут быть любые.

let a = 0.1;
let b = 0.2;

Ответы (2 шт):

Автор решения: Igor
exp(ln(a) + ln(b))

Тело сообщения должно содержать не менее 30 символов; вы ввели 19.

→ Ссылка
Автор решения: Zhihar

Способов несколько

  1. использование деления

     const res = a / (1 / b);
    

Способ универсальный по сравнению со способом 2), НЕДОСТАТОК - если b = 0, то способ не работает

  1. используя логарифмы и экспоненту

     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

  1. использовать тангенсы:

любое число можно представить как тангенс угла 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 ну и опять из-за того, что функции высчитываются через ряды плывет точность (чтуь-чуть)

→ Ссылка