Форум сайта python.su
вот есть такая функция
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
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
Офлайн
Проблема в этом условии: 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
Отредактировано (Март 24, 2011 03:26:10)
Офлайн
Тогда можете предложить как проверку сделать чисел float? на целые
Офлайн
>>> c = 0.1 + 0.2
>>> c
0.30000000000000004
как такое получается вообще? разве не должно быть просто 0.3 ?
Офлайн
Да что же это такое! Третий раз за месяц.
http://asvetlov.blogspot.com/2011/02/blog-post.html
Числа с плавающей запятой следует сравнивать как abs(c - int©) < 1e-9 (порог подберите сами).
Офлайн
Андрей Светлова с этим можете помочь? тут такое дело. все равно не пойму как быть в таком случае. подбирать порог не получается т.к вывод вот такой:
порог подберите сами
Офлайн