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.
pętla for a krok
- Rejestracja: dni
- Ostatnio: dni
- Postów: 25
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 13042
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?
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Hong Kong
for a in xrange(21):
print (a - 10) / 10.0
- Rejestracja: dni
- Ostatnio: dni
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))
- Rejestracja: dni
- Ostatnio: dni
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
- Rejestracja: dni
- Ostatnio: dni
Ty tak poważnie?
x = 0,110 = 0,00011(0011)2
Gdzie wstawić przecinek w x/10?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Hong Kong
@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
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Hong Kong
dokladnie, osobiscie poza paroma szczegolami wole 2.x i wlasnie jego uzywam