LINUX.ORG.RU
решено ФорумTalks

[python] [ЧЯДНТ] [математика] Питон неправильно считает

 , ,


0

1

Есть неравенство. Проверяю корни Питоном (третьим) и получаю ответ противоположный тому, который получил решая руками. Такой ответ, как у меня получило ещё 2 человека.

Вот код:

#! /usr/bin/python

from math import log

x = 4
a = x*x + 2*x - 1
if a < 0 :
  print("False") #Нельзя под логарифм брать отрицательное число
else:
  print("True" if log(a, 1/7) <= -1 else "False") # Выводит 'True', хотя 4 не есть корнем уравнения

Мой ответ: [-4;-1-sqrt(2)) и (-1+sqrt(2);2]. Промежуток (-1-sqrt(2); -1+sqrt(2)) выколот из-за того, что под логарифмом не может быть отрицательное число (x*x + 2*x -1). Мой ответ правилен, что и видно на графике (спасибо adriano32, за ответы на нубские вопросы и правку Вики связанную с инженерным ПО (gnuplot)). Я что-то в коде на так написал, что-то не так решил, или Питон тупит? Как быть? Вот так я решал: http://ompldr.org/vYmpmZg/527b.pdf.

1/7? 1/7 в питоне будет 0

1.0/7 будет ок

redixin ★★★★
()
[aedeph@aedeph ~]$ python
Python 2.7.2 (default, Oct 27 2011, 01:40:22) 
[GCC 4.6.1 20111003 (Red Hat 4.6.1-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/7
0
aedeph
()
Ответ на: комментарий от aedeph

3-й питон:

encyrtid@localhost ~ $ python
Python 3.2 (r32:88445, Nov 26 2011, 15:30:57) 
[GCC 4.6.2] on linux3
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/7
0.2857142857142857

encyrtid ★★★★★
()

Мне кажется, что на графике видно что твой ответ совсем неправильный. 2 точно не входит в область решения.

provaton ★★★★★
()

просто кто-то неправильно читает
ман округление
потому 1.0/7

[ megabaks@desktop ] ~ $ python -c 'print 1/7'
0
[ megabaks@desktop ] ~ $ python -c 'print 1.0/7'
0.142857142857
[ megabaks@desktop ] ~ $

megabaks ★★★★
()

ТС, ты знаешь, что логарифм с основанием меньшим единицы функция убывающая?

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Покажите, где написано, в исходном сообщении не вижу.
в питоне никогда не пытался кинуть логарифу основание 0.

aptyp ★★★★
()
Ответ на: комментарий от theNamelessOne

я невнимательный, прошу прощения.

aptyp ★★★★
()

gnuplot кстати, не имеет функции логарифма с произвольным основанием, поэтому надо писать log(x*x+2*x-1)/log(0.1428).

provaton ★★★★★
()

В этой строчке ошибка: 7 = x^2 + 2x−1

Неравенство превратилось в равенство, правая и левая часть поменялись местами, а знак не поменялся почему-то.

buddhist ★★★★★
()
Ответ на: комментарий от provaton

Да, с графиком что-то не то. Но Питон, например, говорит, что всё, что меньше -4 и больше 2 подходит. К стати калькулятор телефона говорит, что -4 и 2 подходят, а Питон говорит — нет. Как в Питоне указать двойную точность?

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от sphericalhorse

Читай тред до конца, уже все разжевали.

provaton ★★★★★
()
Ответ на: комментарий от sphericalhorse

Как в Питоне указать двойную точность?

Питон и так использует двойную точность, смотри sys.float_info

Просто надо понимать, что проверять равенства «в лоб» в случае арифметики с плавающей точкой нельзя. Надо смотреть, чтоб модуль разности был меньше допустимой погрешности.

provaton ★★★★★
()
Ответ на: комментарий от provaton

Надо смотреть, чтоб модуль разности был меньше допустимой погрешности.

Какой тогда код будет? Не могу понять.

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от sphericalhorse

Только строго не судите. Это моя вторая программа на Питоне (первая — «Hell, world!»). Манов не читал, в ВУЗе не учился, эманировал чужой код.

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от sphericalhorse

Как-то так:

In [1]: from math import log

In [2]: eps = 10**(-5)

In [3]: eps
Out[3]: 1e-05

In [4]: res = log(7, 1/7)

In [5]: res
Out[5]: -0.9999999999999999

In [6]: (res < - 1) or (abs(res +1) < eps)
Out[6]: True
provaton ★★★★★
()
Ответ на: комментарий от provaton

В питоне у тебя как раз почти все идеально, а в матматике - жах :)

Если не считать той самой ошибки, что не так?

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от provaton

Спасибо, разобрался (хотя надо было сначала поискать, а потом спрашивать, т. к. сделал наоборот и нашел ответ раньше, чем ты отписал, но всё равно большое спасибо).

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от provaton

Ну то, что ты сразу не увидел, что график, построенный гнуплотом - в корне неверный.

:)
Я сейчас именно над графиком работаю. Только меня волнует не то, что я не увидел, а то, что нарисовал неправильно.
Просто я не самый ярый фанат математики.

sphericalhorse ★★★★★
() автор топика
Ответ на: комментарий от sphericalhorse

Только меня волнует не то, что я не увидел, а то, что нарисовал неправильно.

Как ты правильно нарисуешь, если ты не догадываешься как он даже примерно должен выглядеть?

provaton ★★★★★
()
Ответ на: комментарий от provaton

Примерно так-же, только графики логарифмической функции должны бить перевёрнутые и пересекать прямую y=-1 в точках -4 и 2. Или нет? Но плот такого в упор не хочет рисовать.

Если свести до x^2+2*x-1>=7, то будет парабола, пересекающая Ox в точках -4 и 2.

sphericalhorse ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.