У каждого в жизни есть кто-то, кто никогда тебя не отпустит, и кто-то, кого никогда не отпустишь ты.
Подскажите, как правильно написать код в си для:
1. (a+bc)*log(x)
пишу (a+(b*c))*log10(x)
2. 3 корень sin^2(y)
пишу exp(1/3*log(pow(sin,2)(y))))
где ошибка?
1. (a+bc)*log(x)
пишу (a+(b*c))*log10(x)
2. 3 корень sin^2(y)
пишу exp(1/3*log(pow(sin,2)(y))))
где ошибка?
@темы: C#
так си или си шарп?
пишу (a+(b*c))*log10(x)
(a + b*c) * log10(x), а с чего вы взяли, что там ошибка?
3 корень sin^2(y)
корень от синуса в квадрате будет просто синус же
3 * sqrt(pow(sin(y), 2));
вот скрин
тут просто писать, как видишь? То есть как вы написали?
А выдает, дайте угадаю, единицу?
В С и С++ если целое делить на целое, то результат тоже будет целым числом. Таким образом, 1/3 дает ноль.
,
а
.
А во-вторых:
=)
pow(pow(sin(y), 2), 1.0/3.0)
Можно, но зачем?
(sin(x)^2)^(1/3) = sin(x)^(2/3)
В вашем случае получается лишний вызов функции, а это лишние вычислительные затраты.
(sin(x)^2)^(1/3) = sin(x)^(2/3)
В вашем случае получается лишний вызов функции, а это лишние вычислительные затраты.
А можно глупый вопрос...
Ведь дробная степень обычно определяется только для положительных оснований... Я не знаю как такое считает си, но многие вычислительные пакеты заточены именно под такое определение...
Например, Вольфрам выдёт комплексное число с минимальным аргументом... www.wolframalpha.com/input/?i=%28-8%29%5E%281%2...
Так может имеет смысл идти на вычислительные затраты при отрицательном синусе...
Нет, вопрос ни разу не глупый, это я глупый =)
Тем более, что `man pow` очень отчётливо говорит о том, что "Если x меньше 0, а y конечное не-целое число, происходит ошибка и возвращается NaN".
Всё верно, сначала надо возводить в квадрат, а потом уже в степень 1/3.