Как умножить 2 float числа не используя знак умножения?
Числа могут быть любые.
let a = 0.1;
let b = 0.2;
Как умножить 2 float числа не используя знак умножения?
Числа могут быть любые.
let a = 0.1;
let b = 0.2;
Способов несколько
использование деления
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 ну и опять из-за того, что функции высчитываются через ряды плывет точность (чтуь-чуть)
console.log( res = a / (1 / b) ); вывел правильно 0.02 остальные
0.02 с хвостиком выводят 0.020000000000000004
– Serge88
Nov 07 '21 at 15:00
вывел правильно 0.02 Почему вы думаете, что это правильный ответ? Просто выведите чуть больше знаков: (0.1*0.2).toFixed(20). А вообще, см.: Вычисления на числах с плавающей точкой не работают.
– wololo
Nov 07 '21 at 15:08
log(2) / log(10) - это иррациональное число, то чаще всего вы не сможете на компьютере получать действительные числа, соответствующие их десятичной записи
– Zhihar
Nov 07 '21 at 15:10
exp(ln(a) + ln(b))
Тело сообщения должно содержать не менее 30 символов; вы ввели 19.
"ReferenceError: exp is not defined"
– Serge88
Nov 07 '21 at 14:44
console.log( Math.exp(ln(a) + ln(b)) ); так тоже почему то выдает ошибку ReferenceError: ln is not defined
– Serge88
Nov 07 '21 at 14:50
console.log( Math.exp(Math.log(a) + Math.log(b)) ); но выводит почему то 0.02000000000000001 а должен 0.02
– Serge88
Nov 07 '21 at 14:55
0.02, а не0.020000000000000004...– wololo Nov 07 '21 at 15:57float. Целые числа позволяют хранить количество молекул на Земле. Переводите метры в миллиметры или нанометры, все расчеты производите в этих единицах, а при выводе преобразовывайте как надо. Это вам не математика, это реальный мир. – Leonid Nov 07 '21 at 16:05