Найти - Пользователи
Полная версия: Не могу отловить ошибку в программе
Начало » Центр помощи » Не могу отловить ошибку в программе
1
garza
вот есть такая функция


def get_Llamba(E2, basis_RS, dom_weights, lamba_combi, select, n):

result = list()

if select == 1:
N = n
elif select == 2:
N = 2
elif select == 3:
N = 1
elif select == 4:
N = 2

for i in xrange(len(E2)):
tmp = 0
cps = 0
for j in xrange(len(dom_weights)):
tmp = (get_norma(scalar_vp(dom_weights[j], N)))**2
tmp = tmp/((get_norma(scalar_vp(basis_RS[j], N)))**2)
cps = cp(scalar_vp(dom_weights[j], N), minus_vp(scalar_vp(lamba_combi, N), scalar_vp(E2[i], N)))
tmp = tmp*cps
print tmp
print check_cp(tmp)
print "------------------------"




return result
#проверяет число целое и c>=0
def check_cp(c):
if int(c) == c and c>=0:
return 1
else:
return 0
она не полностью готова но суть в том что вот я вычислил tmp.
результат подаю в функцию check_cp. Она чекает является ли число целым и больше ли оно нуля. ну так вот результат совсем неожиданный!!!

результат:
4.0
0
------------------------
4.0
1
------------------------
4.0
0
------------------------
2.0
0
------------------------
2.0
1
------------------------
2.0
0
------------------------
2.0
0
------------------------
0.0
1
------------------------
0.0
1
------------------------
2.0
0
------------------------
0.0
1
------------------------
-2.0
0
------------------------
0.0
1
------------------------
0.0
1
------------------------
0.0
1
как видите для одинаковых чисел разный результат!!! как быть? ничего не пойму, причем я использую такую проверку и в других местах программы и там она работает абсолютно адекватно! пробовал менять название функции и использовать в каждом месте отдельно - эффекта нет, тоже самое получается, именно на этом участке вот такая фигня. помогите плз!
dimabest
Проблема в этом условии: if int© == c

Надеюсь, пример подскажет почему:
>>> c = 0.1 + 0.2
>>> c
0.30000000000000004
>>> i = c * 10
>>> i
3.0000000000000004
>>> print i
3.0
>>> int(i) == i
False
garza
Тогда можете предложить как проверку сделать чисел float? на целые
garza
>>> c = 0.1 + 0.2
>>> c
0.30000000000000004

как такое получается вообще? разве не должно быть просто 0.3 ?
Андрей Светлов
Да что же это такое! Третий раз за месяц.
http://asvetlov.blogspot.com/2011/02/blog-post.html

Числа с плавающей запятой следует сравнивать как abs(c - int©) < 1e-9 (порог подберите сами).
Actor
введи погрешность измерения
garza
Андрей Светлов
порог подберите сами
а с этим можете помочь? тут такое дело. все равно не пойму как быть в таком случае. подбирать порог не получается т.к вывод вот такой:

vector =
basis =
lambaj =
combi =
tmp =4.0
check_cp(tmp) =0
abs(int(tmp) - tmp) =1.0
————————
vector =
basis =
lambaj =
combi =
tmp =4.0
check_cp(tmp) =1
abs(int(tmp) - tmp) =0.0


руками считал, tmp в обоих случаях ровно 4.
но почему в одном случае он посчитал все верно а во втором показал абсолютную разность в целую единицу? помогите пожалуйста! не знаю что и делать, надо дописывать прогу, а застрял на тут…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB