Cześć,
chcę zrobić pętlę for w przedziale (-1,1) z krokiem co 0.1, ale range przyjmuje tylko inty, po zaokrągleniu mam krok co 0...
zwiekszając argument x=x+0.1 nie działa niestety. ktoś ma jakiś pomysł?
przepraszam za trywialne pytania, jestem poczatkujacy.
Krok co 0.1
się nie sprawdzi do końca tak jak myślisz z powodu niedokładności liczb zmiennoprzecinkowych.
Nie będzie Ci lepiej po prostu dzielić przez 10
?
Ja bym to zrobił o tak
for a in range(-10,10,1):
a /= 10
print(a)
edit:post wyżej już wspomniano o tym sposobie.
for a in xrange(21):
print (a - 10) / 10.0
Dzięki wielkie :)!
A swoją drogą ciekawe dlaczego niedokładność reprezentacji liczb zmiennoprzecinkowych daje efekty przy dodawaniu, a nie daje przy dzieleniu przez 10.
from numpy import *
for n in arange(-1,1.000001,0.1):
print(n)
print(arange(-1,1.000001,0.1))
Dzielenie liczby całkowitej przez dziesięć i jego wielokrotności to zwykłe dopisanie do zmiennej gdzie wstawić przecinek, dużo prostsze od dodawania liczb zmiennoprzecinkowych
Ty tak poważnie?
x = 0,110 = 0,00011(0011)2
Gdzie wstawić przecinek w x/10?
@bogdans mysle ze chodzi o domyslne zaokraglenie metody __str__
klasy float
, po wywolaniu:
for a in xrange(21):
value = (a - 10) / 10.0
print "%0.12f %0.18f" % (value, v`code> output:`-1.000000000000 -1.000000000000000000
-0.900000000000 -0.900000000000000022
-0.800000000000 -0.800000000000000044
-0.700000000000 -0.699999999999999956
-0.600000000000 -0.599999999999999978
-0.500000000000 -0.500000000000000000
-0.400000000000 -0.400000000000000022
-0.300000000000 -0.299999999999999989
-0.200000000000 -0.200000000000000011
-0.100000000000 -0.100000000000000006
0.000000000000 0.000000000000000000
0.100000000000 0.100000000000000006
0.200000000000 0.200000000000000011
0.300000000000 0.299999999999999989
0.400000000000 0.400000000000000022
0.500000000000 0.500000000000000000
0.600000000000 0.599999999999999978
0.700000000000 0.699999999999999956
0.800000000000 0.800000000000000044
0.900000000000 0.900000000000000022
1.000000000000 1.000000000000000000
Tak przy okazji xrange się nie stosuje, jest deprecated.
Skąd taki pomysł? W Pythonie 2 powinno się nawet stosować xrange, bo jest znacznie wydajniejsze, a w Pythonie 3 po prostu go nie ma i range
działa jak xrange
z Py2.
dokladnie, osobiscie poza paroma szczegolami wole 2.x i wlasnie jego uzywam
Range po prostu daje iterator, więc to nie jest kwestia "wydajności", nie tworzy fizycznie listy.
Natomiast range tworzy fizycznie całą listę. Zależnie co potrzebujemy, tego stosujemy.