Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2023, 14:17   #1
solidsnake777999
Новичок
Джуниор
 
Регистрация: 25.12.2023
Сообщений: 1
По умолчанию Подскажите, пожалуйста, правильно ли я решил?

Я проверял функцию при x=2.

Мой код:
Код:

def compute_ln(x, eps):
    if x <= 0:
        return float('-inf')  # Логарифм от неположительного числа равен минус бесконечности.

    if x == 1:
        return 0  # Логарифм от 1 равен 0.

    if x < 0:
        return float('nan')  # Логарифм от отрицательного числа является комплексным числом.

    term = x - 1
    result = term
    n = 2

    while abs(term) > eps:
        term *= -(x - 1)
        term /= n
        result += term
        n += 1

    return result

x = 2.0  # Замените x на ваше значение
eps = 1e-6  # Замените eps на вашу желаемую точность

result = compute_ln(x, eps)
print(f"ln({x}) = {result}")
Результат этого кода: ln(2.0) = 0.6321205357142857.

Ещё есть такой вариант:
Код:

x = 2
eps = 1e-6
result = 0
term = x - 1
n = 1

while abs(term) > eps:
    result += term
    n += 1
    term = ((-1)**(n-1) * (x-1)**n) / n

print(result)
Результат: 0.6931476805602526.
Изображения
Тип файла: png задание.PNG (54.9 Кб, 0 просмотров)
solidsnake777999 вне форума Ответить с цитированием
Старый 25.12.2023, 14:27   #2
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,043
По умолчанию

я далёк от математики, но данный отрезок
Цитата:
Сообщение от solidsnake777999 Посмотреть сообщение
if x <= 0:
return float('-inf') # Логарифм от неположительного числа равен минус бесконечности.

if x == 1:
return 0 # Логарифм от 1 равен 0.

if x < 0:
return float('nan') # Логарифм от отрицательного числа является комплексным числом.
можно было написать через elif - мелочь, а приятно......
Ципихович Эндрю на форуме Ответить с цитированием
Старый 25.12.2023, 14:46   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
    result = 0
    term = x - 1
    n = 1

    while abs(term / n) > eps:
        result += term / n
        term *= -(x - 1)
        n += 1
Основная проблема, это "накопление" делителей в term, а нужно делить только на текущий n.
"return float('nan')" недостижим.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правильно ли я понял условие и решил задачу на с# krolik131 C# (си шарп) 0 05.04.2020 19:38
Подскажите пожалуйста как динамически правильно расширить стэк Nata Golden rose Общие вопросы C/C++ 4 23.05.2014 19:14
Подскажите пожалуйста правильно ли я, динамически распределяю память? Nata Golden rose Общие вопросы C/C++ 10 17.05.2014 21:34
правильно ли решил задачу на GPSS denis_dneprovski Помощь студентам 1 18.12.2011 23:21
подскажите пожалуйста что не правильно в скрипте. 6AT9 JavaScript, Ajax 1 25.11.2008 00:21