Thread View: pl.comp.lang.python
33 messages
33 total messages
Started by Sulsa
Tue, 16 Oct 2007 08:34
przypisac nieskonczonosc
Author: Sulsa
Date: Tue, 16 Oct 2007 08:34
Date: Tue, 16 Oct 2007 08:34
4 lines
811 bytes
811 bytes
Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość +nieskonczoność --
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 09:21
Date: Tue, 16 Oct 2007 09:21
12 lines
1702 bytes
1702 bytes
On Oct 16, 10:34 am, Sulsa <su...@dontmail.me> wrote: > Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość > +nieskonczoność Najprosciej tak: PosInf = 1e300 * 1e300 NegInf = -PosInf No, ale jest to otwarty problem. To zalezy od implementacji systemowej bibliotece w C. W dodatku z tymi wartosciami sa spore problemy z picklem. Ba, w Windows to skaszani sie nawet float(repr(x)). Innymi slowy -- nie polecam.
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 10:02
Date: Tue, 16 Oct 2007 10:02
19 lines
1198 bytes
1198 bytes
Witam Bart Ogryczak wrote: > Najprosciej tak: > PosInf = 1e300 * 1e300 > NegInf = -PosInf > > No, ale jest to otwarty problem. To zalezy od implementacji systemowej > bibliotece w C. Standard C99 określa takie symbole jak NaN i Inf, więc nie powinno być problemu. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 11:20
Date: Tue, 16 Oct 2007 11:20
28 lines
1852 bytes
1852 bytes
On Oct 16, 12:02 pm, Seweryn Habdank-Wojewódzki <shw_m...@wp.pl> wrote: > Witam > > Bart Ogryczak wrote: > > Najprosciej tak: > > PosInf = 1e300 * 1e300 > > NegInf = -PosInf > > > No, ale jest to otwarty problem. To zalezy od implementacji systemowej > > bibliotece w C. > > Standard C99 określa takie symbole jak NaN i Inf, więc nie powinno być > problemu. Ha, to mi znajdz system, na którym tego standardu sie trzymaja. Windows: >>> 1e300*1e300 1.#INF Solaris: >>> 1e300*1e300 Infinity Linux: >>> 1e300*1e300 inf
Re: przypisac nieskonczonosc
Author: Adam Mikuta
Date: Tue, 16 Oct 2007 11:27
Date: Tue, 16 Oct 2007 11:27
14 lines
1296 bytes
1296 bytes
Dnia 16.10.2007 Bart Ogryczak <B.Ogryczak@gmail.com> napisał/a:
>> Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość
>> +nieskonczoność
> Najprosciej tak:
> PosInf = 1e300 * 1e300
> NegInf = -PosInf
A może:
>>> float("infinity")
inf
--
Adam "Prawda jest prosta - gdyby było inaczej
każdy głupiec mógłby ją zrozumieć".
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 12:03
Date: Tue, 16 Oct 2007 12:03
34 lines
1575 bytes
1575 bytes
Witam Bart Ogryczak wrote: > Windows: >>>> 1e300*1e300 > 1.#INF > > Solaris: >>>> 1e300*1e300 > Infinity > > Linux: >>>> 1e300*1e300 > inf To jest raczej problem implementacji i reprezentacji tekstowej. W każdym razie w C używasz funkcji isnan(x) lub isinf(x). Te funkcje zwracają stosowne wartości. isnan(x) => 0 jeśli x nie jest NaN. 1 jesli x jest NaN. isinf(x) => -1 jeśli x jest -Inf, 1 jeśli x jest Inf, 0 w przeciwnym przypadku. Wszelkie zażalenia proszę kierować do producenta kompilatora i systemu operacyjnego ;-). Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 12:38
Date: Tue, 16 Oct 2007 12:38
9 lines
1495 bytes
1495 bytes
On Oct 16, 1:27 pm, Adam Mikuta <adammikutaWyt...@gmail.wyt.nij.com>
wrote:
> A może:
> >>> float("infinity")
>
> inf
Nie dziala pod Windows.
ValueError: invalid literal for float(): infinity
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 12:41
Date: Tue, 16 Oct 2007 12:41
29 lines
2316 bytes
2316 bytes
On Oct 16, 2:03 pm, Seweryn Habdank-Wojewódzki <shw_m...@wp.pl> wrote: > Witam > > Bart Ogryczak wrote: > > Windows: > >>>> 1e300*1e300 > > 1.#INF > > > Solaris: > >>>> 1e300*1e300 > > Infinity > > > Linux: > >>>> 1e300*1e300 > > inf > > To jest raczej problem implementacji i reprezentacji tekstowej. Nie tylko tekstowej. Spróbuj zrobic z tego binarne pikle. > W każdym razie w C używasz funkcji isnan(x) lub isinf(x). Te funkcje > zwracają stosowne wartości. > isnan(x) => 0 jeśli x nie jest NaN. 1 jesli x jest NaN. > > isinf(x) => -1 jeśli x jest -Inf, 1 jeśli x jest Inf, 0 w przeciwnym > przypadku. Ale jak to pomaga w stworzeniu stalej?
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 13:07
Date: Tue, 16 Oct 2007 13:07
54 lines
2849 bytes
2849 bytes
Witam Bart Ogryczak wrote: >> To jest raczej problem implementacji i reprezentacji tekstowej. > > Nie tylko tekstowej. Spróbuj zrobic z tego binarne pikle. Nie spróbuję, bo nie znam się :-). >> W każdym razie w C używasz funkcji isnan(x) lub isinf(x). Te funkcje >> zwracają stosowne wartości. > >> isnan(x) => 0 jeśli x nie jest NaN. 1 jesli x jest NaN. >> >> isinf(x) => -1 jeśli x jest -Inf, 1 jeśli x jest Inf, 0 w przeciwnym >> przypadku. > > Ale jak to pomaga w stworzeniu stalej? W C99 masz w math.h co następuje: /* MACROS */ #define HUGE_VAL <double rvalue> #define HUGE_VALF <float rvalue> [added with C99] #define HUGE_VALL <long double rvalue> [added with C99] #define INFINITY <float rvalue> [added with C99] #define NAN <float rvalue> [added with C99] To jest respektowane przez sensownych producentów kompilatorów. Tak więc jeśli zależy komuś na NAN i INFINITY, to może sobie spokojnie to zawrzeć w programie. Może z poziomu Pythona wołać sobie podprocedurki np. set_inf(), które zamienią jakiś obiekt Pythona na wartość INF. set_nan(), które zamienią jakiś obiekt Pythona na wartość NAN. A z powrotem trzeba reagować identycznie, czyli trzeba wiedzieć kiedy C wypluwa INF lub NAN więc Python może dostać jakiś obiekt który reprezentuje te wartości w silniku C. Jeśli da się wydłubać double z wartości zmienno przecinkowej w Pythonie, to OP może przekazywać to do procedurek w C, one sobie z tym poradzą :-). Problem jest dla mnie odległy bo w Pythonie nie używałem nigdy inf i nan, a w C są te wartości stosuję od dłuższego czasu z powodzeniem. Zadanie pisania samemu NAN i INFINITY nie jest banalne (choć nie trudne). Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Adam Karpierz
Date: Tue, 16 Oct 2007 14:16
Date: Tue, 16 Oct 2007 14:16
5 lines
982 bytes
982 bytes
hint: fpconst http://cheeseshop.python.org/pypi/fpconst AK
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 14:25
Date: Tue, 16 Oct 2007 14:25
38 lines
2885 bytes
2885 bytes
On Oct 16, 3:07 pm, Seweryn Habdank-Wojewódzki <shw_m...@wp.pl> wrote: > Witam > > Bart Ogryczak wrote: > >> To jest raczej problem implementacji i reprezentacji tekstowej. > > > Nie tylko tekstowej. Spróbuj zrobic z tego binarne pikle. > > Nie spróbuję, bo nie znam się :-). > > >> W każdym razie w C używasz funkcji isnan(x) lub isinf(x). Te funkcje > >> zwracają stosowne wartości. > > >> isnan(x) => 0 jeśli x nie jest NaN. 1 jesli x jest NaN. > > >> isinf(x) => -1 jeśli x jest -Inf, 1 jeśli x jest Inf, 0 w przeciwnym > >> przypadku. > > > Ale jak to pomaga w stworzeniu stalej? > > W C99 masz w math.h co następuje: > > /* MACROS */ > #define HUGE_VAL <double rvalue> > #define HUGE_VALF <float rvalue> [added with C99] > #define HUGE_VALL <long double rvalue> [added with C99] > > #define INFINITY <float rvalue> [added with C99] > #define NAN <float rvalue> [added with C99] > > To jest respektowane przez sensownych producentów kompilatorów. Wrecz przeciwnie, zaden z sensownych producentów tego nie wspiera. Nie ma tego w Visual Studio, nie ma tego w Borlandzie. A w GCC, nawet tym najnowszym, wsparcie dla IEEE754 float point, jest oznaczone jako "broken", z przypisem, ze na niektórych architekturach byc moze bedzie dzialac. Innymi slowy OKDR, C99 to vaporware.
Re: przypisac nieskonczonosc
Author: Adam Karpierz
Date: Tue, 16 Oct 2007 15:11
Date: Tue, 16 Oct 2007 15:11
5 lines
1041 bytes
1041 bytes
Tu nowsza nieco wersja: http://sourceforge.net/project/showfiles.php?group_id=71248 AK
Re: przypisac nieskonczonosc
Author: Marcin Ciura
Date: Tue, 16 Oct 2007 16:07
Date: Tue, 16 Oct 2007 16:07
18 lines
2035 bytes
2035 bytes
On Oct 16, 10:34 am, Sulsa <su...@dontmail.me> wrote:
> Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość
> +nieskonczoność
Jesli potrzebujesz tej nieskonczonosci tylko do porownan
i nie bedziesz na niej wykonywac operacji arytmetycznych, to:
class Infinity(int):
def __cmp__(self, other):
if isinstance(other, self.__class__): return self - other
return self
MinusInf = Infinity(-9999)
PlusInf = Infinity(+9999)
Rozszerzenie klasy o metody __str__() i __repr__()
to cwiczenie dla czytelnika, ktoremu sa one potrzebne.
Marcin
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 16:40
Date: Tue, 16 Oct 2007 16:40
63 lines
2784 bytes
2784 bytes
Witam
Już jest mocno NTG.
Bart Ogryczak wrote:
> Wrecz przeciwnie, zaden z sensownych producentów tego nie wspiera. Nie
> ma tego w Visual Studio, nie ma tego w Borlandzie.
Borland do sensownych nie należy.
W Visual Studio nie ma isnan i isinf, ale są funkcje produkcji własnej.
Tak jak pisałem należy mieć pretensje do producentów.
Polecam płytkie intelektualne studium:
#include <float.h>
#if defined(__VISUALC__)
#define IsInf(n) _finite(n)
#elseif defined(__GNUC__)
#define IsInf(n) finite(n) // moze byc isinf(n)
#else
#define IsInf(n) 1 // tak na wszelki wypadek
#endif
#if defined(__VISUALC__)
#define IsNaN(n) _isnan(n)
#elseif defined(__GNUC__)
#define IsNaN(n) isnan(n)
#else
#define IsNaN(n) ((n) != (n))
#endif
Poza tym można pobawić się:
#include <math.h>
#if __sun__
#include <ieeefp.h>
#define IsInf(x)\
(fpclass(x) == FP_NINF ? -1 : (fpclass(x) == FP_PINF ? 1 : 0))
#endif
Zarówno na SUN, GCC, VS jest coś takiego jak fpclass(.) -- na VS jest
_fpclass(.).
> A w GCC, nawet tym
> najnowszym, wsparcie dla IEEE754 float point, jest oznaczone jako
> "broken", z przypisem, ze na niektórych architekturach byc moze bedzie
> dzialac.
Etam (tm). Co się przejmujesz wszystkimi :-). Sprawdź gdzie nie działa, a
gdzie potrzebujesz, żeby tam działało. GCC na wielu platformach działa,
pamiętaj, że mowa jest o INFINITY i NAN więc wystarczy że to zadziała.
Zresztą można mieć tak na dzień dobry pretensje, że _niewszyscy_ producenci
procków obsługują IEEE754.
Pozdrawiam.
--
|\/\/| Seweryn Habdank-Wojewódzki
\/\/
Re: przypisac nieskonczonosc
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 19:11
Date: Tue, 16 Oct 2007 19:11
76 lines
3576 bytes
3576 bytes
Seweryn Habdank-Wojewódzki wrote: > Witam > > Już jest mocno NTG. > > Bart Ogryczak wrote: > >> Wrecz przeciwnie, zaden z sensownych producentów tego nie wspiera. Nie >> ma tego w Visual Studio, nie ma tego w Borlandzie. > > Borland do sensownych nie należy. > > W Visual Studio nie ma isnan i isinf, ale są funkcje produkcji własnej. > Tak jak pisałem należy mieć pretensje do producentów. > > Polecam płytkie intelektualne studium: > > #include <float.h> > > #if defined(__VISUALC__) > #define IsInf(n) _finite(n) > #elseif defined(__GNUC__) > #define IsInf(n) finite(n) // moze byc isinf(n) > #else > #define IsInf(n) 1 // tak na wszelki wypadek > #endif > > > #if defined(__VISUALC__) > #define IsNaN(n) _isnan(n) > #elseif defined(__GNUC__) > #define IsNaN(n) isnan(n) > #else > #define IsNaN(n) ((n) != (n)) > #endif > > Poza tym można pobawić się: > > #include <math.h> > #if __sun__ > #include <ieeefp.h> > #define IsInf(x)\ > (fpclass(x) == FP_NINF ? -1 : (fpclass(x) == FP_PINF ? 1 : 0)) > #endif > > Zarówno na SUN, GCC, VS jest coś takiego jak fpclass(.) -- na VS jest > _fpclass(.). > >> A w GCC, nawet tym >> najnowszym, wsparcie dla IEEE754 float point, jest oznaczone jako >> "broken", z przypisem, ze na niektórych architekturach byc moze bedzie >> dzialac. > > Etam (tm). Co się przejmujesz wszystkimi :-). Sprawdź gdzie nie działa, a > gdzie potrzebujesz, żeby tam działało. GCC na wielu platformach działa, > pamiętaj, że mowa jest o INFINITY i NAN więc wystarczy że to zadziała. > Zresztą można mieć tak na dzień dobry pretensje, że _niewszyscy_ producenci > procków obsługują IEEE754. > > Pozdrawiam. > Mozesz powiedziec dlaczego wykroczenie po za rozmiar liczby jest takie istotne ? Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie wie, ze cos jest nie tak :) kadry place - zeby tak nisko nie bylo: - program mozolnie wylicza - trafia na dzielenie przez zero - to co zrobic ? zepchnac wyjatek, zarzucic liczenie - przerwac program, ... - wyjatek jest i tyle - a ty se rob co chcesz - dla jednoego to zero, a dla innego nie znaczy nic i program sie wypierdzieli, a inny powie -nie pokazac - hulaj dusza .... mak
Re: przypisac nieskonczonosc
Author: Adam Karpierz
Date: Tue, 16 Oct 2007 19:28
Date: Tue, 16 Oct 2007 19:28
11 lines
1627 bytes
1627 bytes
"Grzegorz Makarewicz" <mak@trisoft.com.pl> wrote: > Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, > wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie > wie, ze cos jest nie tak :) Brawo ! Nareczcie ktos napisal jak sie to robi _praktycznie_ a nie 'teoretycznie' :) AK
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 19:30
Date: Tue, 16 Oct 2007 19:30
55 lines
3179 bytes
3179 bytes
Witam Grzegorz Makarewicz wrote: > Mozesz powiedziec dlaczego wykroczenie po za rozmiar liczby jest takie > istotne ? No właśnie to zależy co robisz. Jeśli do teraz nie potrzebowałeś to znaczy, że nie potrzebujesz :-). Szkoda tracić czas na takie banialuki. Poza tym co to jest wykroczenie poza rozmiar? NAN to nie jest wykroczenie poza zakres. INFINITY tak, ale tu jest ważne czy to jest + czy -. > Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, > wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie > wie, ze cos jest nie tak :) Tak. Można sypać wyjątek. Ale kiedy rozróżniasz NAN i INFINITY zaczynasz mieć 2 wyjątki to trzeba je obsługiwać osobno. To jest dobre, ale jak takich obliczeń masz trochę to czy każdą funkcję obkładasz obsługą wyjątków, czy jednak stosowne funkcje same potrafią obsłużyć je same sobie, A te co nie potrafią, przekazują taką wartość dalej. > kadry place - zeby tak nisko nie bylo: Co to znaczy? > - program mozolnie wylicza - trafia na dzielenie przez zero - to co > zrobic ? Tak, dzielenie przez zero zgodnie z matematyką daje NAN i faktycznie możesz sypać wyjątek jeśli to jest sytuacja wyjątkowa. > zepchnac wyjatek, zarzucic liczenie - przerwac program, ... - Albo obsłużyć wartość NAN, czy też INFINITY. Są obliczenia gdzie to jest ważne czy masz wartość reprezentowalną przez zmienny przecinek, INFINITY czy NAN. Dla mnie w programach INFINITY to nie to samo co NAN. Nie tylko dzielenie przez 0 jest przyczyną powstawania wartości szczególnych. Zresztą gdyby tak było to nikt nie przejmowałby się i INFINITY == NAN, a tak nie jest. > wyjatek jest i tyle - a ty se rob co chcesz - dla jednoego to zero, a > dla innego nie znaczy nic i program sie wypierdzieli, a inny powie -nie > pokazac - hulaj dusza .... Tego akapitu nie rozumiem. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 19:43
Date: Tue, 16 Oct 2007 19:43
18 lines
1704 bytes
1704 bytes
Adam Karpierz wrote: > "Grzegorz Makarewicz" <mak@trisoft.com.pl> wrote: > >> Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, >> wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie >> wie, ze cos jest nie tak :) > > Brawo ! > Nareczcie ktos napisal jak sie to robi _praktycznie_ a nie > 'teoretycznie' :) > > AK > > ja tam tego pythona bardzo praktycznie wykorzystuje - od teorii sa inni :) mak
Re: przypisac nieskonczonosc
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 19:46
Date: Tue, 16 Oct 2007 19:46
62 lines
3680 bytes
3680 bytes
Seweryn Habdank-Wojewódzki wrote: > Witam > > Grzegorz Makarewicz wrote: > >> Mozesz powiedziec dlaczego wykroczenie po za rozmiar liczby jest takie >> istotne ? > > No właśnie to zależy co robisz. Jeśli do teraz nie potrzebowałeś to znaczy, > że nie potrzebujesz :-). Szkoda tracić czas na takie banialuki. > > Poza tym co to jest wykroczenie poza rozmiar? NAN to nie jest wykroczenie > poza zakres. INFINITY tak, ale tu jest ważne czy to jest + czy -. > >> Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, >> wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie >> wie, ze cos jest nie tak :) > > Tak. Można sypać wyjątek. Ale kiedy rozróżniasz NAN i INFINITY zaczynasz > mieć 2 wyjątki to trzeba je obsługiwać osobno. To jest dobre, ale jak > takich obliczeń masz trochę to czy każdą funkcję obkładasz obsługą > wyjątków, czy jednak stosowne funkcje same potrafią obsłużyć je same sobie, > A te co nie potrafią, przekazują taką wartość dalej. > >> kadry place - zeby tak nisko nie bylo: > > Co to znaczy? > >> - program mozolnie wylicza - trafia na dzielenie przez zero - to co >> zrobic ? > > Tak, dzielenie przez zero zgodnie z matematyką daje NAN i faktycznie możesz > sypać wyjątek jeśli to jest sytuacja wyjątkowa. > >> zepchnac wyjatek, zarzucic liczenie - przerwac program, ... - > > Albo obsłużyć wartość NAN, czy też INFINITY. > > Są obliczenia gdzie to jest ważne czy masz wartość reprezentowalną przez > zmienny przecinek, INFINITY czy NAN. > > Dla mnie w programach INFINITY to nie to samo co NAN. Nie tylko dzielenie > przez 0 jest przyczyną powstawania wartości szczególnych. Zresztą gdyby tak > było to nikt nie przejmowałby się i INFINITY == NAN, a tak nie jest. > >> wyjatek jest i tyle - a ty se rob co chcesz - dla jednoego to zero, a >> dla innego nie znaczy nic i program sie wypierdzieli, a inny powie -nie >> pokazac - hulaj dusza .... > > Tego akapitu nie rozumiem. > > Pozdrawiam. > czy to liczba ? - NIE czy ja piszac jakas procedure mam podjac jaks super akcje ? - NIE - dla piszacego akcje to wartosc dopuszczalna i wiem co z nia zrobic lub nie wiem. Jezeli wiem - to ja to obsluze, jezeli nie to mnie to nie obchodzi - ty sie martw. mak
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 19:53
Date: Tue, 16 Oct 2007 19:53
39 lines
2110 bytes
2110 bytes
Witam Grzegorz Makarewicz wrote: > czy to liczba ? - NIE Samo "NIE" nie wystarczy. Bo masz dwie wartości tego "NIE": - NIE, bo NAN - NIE, bo INFINITY > czy ja piszac jakas procedure mam podjac jaks super akcje ? - NIE No to właśnie pisałem, jeśli nie musiałeś się tym przejmować to się nie przejmuj. Ja to rozróżniam i mnie to jest potrzebne. Mogę oczywiście zamienić te wartości, na wyjątki, ale muszę je rozróżniać. > - dla piszacego akcje to wartosc dopuszczalna i wiem co z nia zrobic lub > nie wiem. Tak. No więc co robisz jak wiesz. I co robisz jak wiesz że inaczej masz reagować na NAN i na INFINITY. > Jezeli wiem - to ja to obsluze, Dokładnie. Tylko jak to robisz? > jezeli nie to mnie to nie obchodzi - ty > sie martw. Tak. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 20:05
Date: Tue, 16 Oct 2007 20:05
48 lines
2722 bytes
2722 bytes
Seweryn Habdank-Wojewódzki wrote: > Witam > > Grzegorz Makarewicz wrote: > >> czy to liczba ? - NIE > > Samo "NIE" nie wystarczy. Bo masz dwie wartości tego "NIE": > > - NIE, bo NAN > - NIE, bo INFINITY masz kontrolke do wczytania liczby - NAN/INF to tylko przypadek nieakceptowanego zakresu - to nie liczba i tyle. > >> czy ja piszac jakas procedure mam podjac jaks super akcje ? - NIE > > No to właśnie pisałem, jeśli nie musiałeś się tym przejmować to się nie > przejmuj. > > Ja to rozróżniam i mnie to jest potrzebne. Mogę oczywiście zamienić te > wartości, na wyjątki, ale muszę je rozróżniać. czyli w momencie zamienienia tego co podano(input) nalezy wiedziec jak sie zachowac w momencie gdy to input jest INF/NAN - tak to rozumiem. python ma rowniez stale - ktore czasami maja swoja reprezentacje, zamiast wygenerowac wyjatek - wlasnie wtedy staraja sie byc madrzejsze od kory: Py_IS_INFINITY(intpart) - object.c:983 > >> - dla piszacego akcje to wartosc dopuszczalna i wiem co z nia zrobic lub >> nie wiem. > > Tak. No więc co robisz jak wiesz. I co robisz jak wiesz że inaczej masz > reagować na NAN i na INFINITY. > >> Jezeli wiem - to ja to obsluze, > > Dokładnie. Tylko jak to robisz? nie badam INF/NAN lecz tylko dopuszczalne zakresy -1*10^-9 -+1*10^9 - to jest moje za zakresem, a nie mityczne NaN/Inf mak
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 20:46
Date: Tue, 16 Oct 2007 20:46
56 lines
3141 bytes
3141 bytes
Witam Grzegorz Makarewicz wrote: >> Samo "NIE" nie wystarczy. Bo masz dwie wartości tego "NIE": >> >> - NIE, bo NAN >> - NIE, bo INFINITY > > masz kontrolke do wczytania liczby - NAN/INF to tylko przypadek > nieakceptowanego zakresu - to nie liczba i tyle. A co to jest kontrolka ;-). Nie mam kontrolki do wczytania liczby. Mam w systemach liczby. I na nich coś liczę. Jak nie mam informacji jaka jest wartość liczby a spodziewam się liczby to mam NAN, obojętne, czy to jest NAN, czy to jest klasa reprezentująca wartość nieokreśloną -- chodzi o fakt istnienia czegoś nieokreślonego. Coś co jest nieskończone to jest INFINITY i znowu nie ma znaczenia, czy to jest niskopoziomowe ustalenie wartości na INFINITY, czy jest to klasa reprezentująca wartość nieskończoną. Dla mnie o są osobne byty. >> Ja to rozróżniam i mnie to jest potrzebne. Mogę oczywiście zamienić te >> wartości, na wyjątki, ale muszę je rozróżniać. > > czyli w momencie zamienienia tego co podano(input) nalezy wiedziec jak > sie zachowac w momencie gdy to input jest INF/NAN - tak to rozumiem. Chyba dobrze. > python ma rowniez stale - ktore czasami maja swoja reprezentacje, > zamiast wygenerowac wyjatek - wlasnie wtedy staraja sie byc madrzejsze > od kory: Co to jest "kora"? >> Dokładnie. Tylko jak to robisz? > > nie badam INF/NAN lecz tylko dopuszczalne zakresy -1*10^-9 -+1*10^9 - to > jest moje za zakresem, a nie mityczne NaN/Inf Słusznie. Jak nie interesuje Ciebie rozróżnienie, to po co komplikować życie. Ale mnie interesuje, więc co zrobisz? Jak napisałbyś kod rozróżniający te dwa byty? Jak napiszesz taki kod dla mnie podam ci przykładziki kiedy potrzebuję to obsłużyć. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Grzegorz Makarewicz
Date: Wed, 17 Oct 2007 08:58
Date: Wed, 17 Oct 2007 08:58
34 lines
2091 bytes
2091 bytes
Seweryn Habdank-Wojewódzki wrote: > Ale mnie interesuje, więc co zrobisz? Jak napisałbyś kod rozróżniający te > dwa byty? > > Jak napiszesz taki kod dla mnie podam ci przykładziki kiedy potrzebuję to > obsłużyć. Już wymyślili - w pythonie jest odpowiednia bateria ;) from decimal import * # Inf inf = Decimal(1) / Decimal(0) print inf # NaN c = Context() c.traps[InvalidOperation] = 0 nan = c.divide(Decimal(0), Decimal(0)) print nan Pewnie chciałbyś te informacje mieć prosto z rozszerzeń napisanych w C ? Jeżeli nie chcesz korzystać z wyjątków to nie masz szansy na wyłapanie tych przypadków: inf = 1.0 / 0.0 print inf nan = 0.0 / 0.0 print nan mak
Re: przypisac nieskonczonosc
Author: Krzysztof Stachlewski
Date: Wed, 17 Oct 2007 09:01
Date: Wed, 17 Oct 2007 09:01
33 lines
2385 bytes
2385 bytes
Grzegorz Makarewicz napisał(a):
> Seweryn Habdank-Wojewódzki wrote:
>
>> Ale mnie interesuje, więc co zrobisz? Jak napisałbyś kod rozróżniający te
>> dwa byty?
>>
>> Jak napiszesz taki kod dla mnie podam ci przykładziki kiedy potrzebuję to
>> obsłużyć.
>
>
> Już wymyślili - w pythonie jest odpowiednia bateria ;)
>
> from decimal import *
>
> # Inf
> inf = Decimal(1) / Decimal(0)
> print inf
>>> from decimal import *
>>> inf = Decimal(1) / Decimal(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/decimal.py", line 1183, in __div__
return self._divide(other, context=context)
File "/usr/lib/python2.5/decimal.py", line 1265, in _divide
return context._raise_error(DivisionByZero, 'x / 0', sign)
File "/usr/lib/python2.5/decimal.py", line 2325, in _raise_error
raise error, explanation
decimal.DivisionByZero: x / 0
Stach
--
http://stachlewski.info/foto
Re: przypisac nieskonczonosc
Author: Grzegorz Makarewicz
Date: Wed, 17 Oct 2007 09:29
Date: Wed, 17 Oct 2007 09:29
22 lines
1948 bytes
1948 bytes
Krzysztof Stachlewski wrote: > Grzegorz Makarewicz napisał(a): >> Seweryn Habdank-Wojewódzki wrote: >> >>> Ale mnie interesuje, więc co zrobisz? Jak napisałbyś kod >>> rozróżniający te >>> dwa byty? >>> >>> Jak napiszesz taki kod dla mnie podam ci przykładziki kiedy >>> potrzebuję to >>> obsłużyć. >> >> >> Już wymyślili - w pythonie jest odpowiednia bateria ;) from decimal import * getcontext().traps[InvalidOperation] = 0 nan = Decimal(0) / Decimal(0) print nan mak
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Wed, 17 Oct 2007 10:37
Date: Wed, 17 Oct 2007 10:37
70 lines
3977 bytes
3977 bytes
On Oct 16, 9:11 pm, Grzegorz Makarewicz <m...@trisoft.com.pl> wrote: > Seweryn Habdank-Wojewódzki wrote: > > Witam > > > Już jest mocno NTG. > > > Bart Ogryczak wrote: > > >> Wrecz przeciwnie, zaden z sensownych producentów tego nie wspiera. Nie > >> ma tego w Visual Studio, nie ma tego w Borlandzie. > > > Borland do sensownych nie należy. > > > W Visual Studio nie ma isnan i isinf, ale są funkcje produkcji własnej. > > Tak jak pisałem należy mieć pretensje do producentów. > > > Polecam płytkie intelektualne studium: > > > #include <float.h> > > > #if defined(__VISUALC__) > > #define IsInf(n) _finite(n) > > #elseif defined(__GNUC__) > > #define IsInf(n) finite(n) // moze byc isinf(n) > > #else > > #define IsInf(n) 1 // tak na wszelki wypadek > > #endif > > > #if defined(__VISUALC__) > > #define IsNaN(n) _isnan(n) > > #elseif defined(__GNUC__) > > #define IsNaN(n) isnan(n) > > #else > > #define IsNaN(n) ((n) != (n)) > > #endif > > > Poza tym można pobawić się: > > > #include <math.h> > > #if __sun__ > > #include <ieeefp.h> > > #define IsInf(x)\ > > (fpclass(x) == FP_NINF ? -1 : (fpclass(x) == FP_PINF ? 1 : 0)) > > #endif > > > Zarówno na SUN, GCC, VS jest coś takiego jak fpclass(.) -- na VS jest > > _fpclass(.). > > >> A w GCC, nawet tym > >> najnowszym, wsparcie dla IEEE754 float point, jest oznaczone jako > >> "broken", z przypisem, ze na niektórych architekturach byc moze bedzie > >> dzialac. > > > Etam (tm). Co się przejmujesz wszystkimi :-). Sprawdź gdzie nie działa, a > > gdzie potrzebujesz, żeby tam działało. GCC na wielu platformach działa, > > pamiętaj, że mowa jest o INFINITY i NAN więc wystarczy że to zadziała. > > Zresztą można mieć tak na dzień dobry pretensje, że _niewszyscy_ producenci > > procków obsługują IEEE754. > > > Pozdrawiam. > > Mozesz powiedziec dlaczego wykroczenie po za rozmiar liczby jest takie > istotne ? > Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, > wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie > wie, ze cos jest nie tak :) Wyjatki maja to do siebie, ze je mozez zlapac w procesie, w który je wywaliles. Troche ciezko przeslac pythonowy wyjatek przez Pyro czy inne SOAP.
Re: przypisac nieskonczonosc
Author: Bart Ogryczak
Date: Wed, 17 Oct 2007 10:41
Date: Wed, 17 Oct 2007 10:41
59 lines
4031 bytes
4031 bytes
On Oct 16, 9:46 pm, Grzegorz Makarewicz <m...@trisoft.com.pl> wrote: > Seweryn Habdank-Wojewódzki wrote: > > Witam > > > Grzegorz Makarewicz wrote: > > >> Mozesz powiedziec dlaczego wykroczenie po za rozmiar liczby jest takie > >> istotne ? > > > No w a nie to zale y co robisz. Je li do teraz nie potrzebowa e to znaczy, > > e nie potrzebujesz :-). Szkoda traci czas na takie banialuki. > > > Poza tym co to jest wykroczenie poza rozmiar? NAN to nie jest wykroczenie > > poza zakres. INFINITY tak, ale tu jest wa ne czy to jest + czy -. > > >> Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, > >> wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie > >> wie, ze cos jest nie tak :) > > > Tak. Mo na sypa wyj tek. Ale kiedy rozró niasz NAN i INFINITY zaczynasz > > mie 2 wyj tki to trzeba je obs ugiwa osobno. To jest dobre, ale jak > > takich oblicze masz troch to czy ka d funkcj obk adasz obs ug > > wyj tków, czy jednak stosowne funkcje same potrafi obs u y je same sobie, > > A te co nie potrafi , przekazuj tak warto dalej. > > >> kadry place - zeby tak nisko nie bylo: > > > Co to znaczy? > > >> - program mozolnie wylicza - trafia na dzielenie przez zero - to co > >> zrobic ? > > > Tak, dzielenie przez zero zgodnie z matematyk daje NAN i faktycznie mo esz > > sypa wyj tek je li to jest sytuacja wyj tkowa. > > >> zepchnac wyjatek, zarzucic liczenie - przerwac program, ... - > > > Albo obs u y warto NAN, czy te INFINITY. > > > S obliczenia gdzie to jest wa ne czy masz warto reprezentowaln przez > > zmienny przecinek, INFINITY czy NAN. > > > Dla mnie w programach INFINITY to nie to samo co NAN. Nie tylko dzielenie > > przez 0 jest przyczyn powstawania warto ci szczególnych. Zreszt gdyby tak > > by o to nikt nie przejmowa by si i INFINITY == NAN, a tak nie jest. > > >> wyjatek jest i tyle - a ty se rob co chcesz - dla jednoego to zero, a > >> dla innego nie znaczy nic i program sie wypierdzieli, a inny powie -nie > >> pokazac - hulaj dusza .... > > > Tego akapitu nie rozumiem. > > > Pozdrawiam. > > czy to liczba ? - NIE No wlasnie do konca tak prosto. Bo to, ze w jednym miejscu masz Inf, nie znaczy, ze cale obliczenia sa NaN. Np. jesli masz 1/x, to dla x = Inf masz zupelnie poprawny wynik (0).
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Wed, 17 Oct 2007 10:48
Date: Wed, 17 Oct 2007 10:48
19 lines
1685 bytes
1685 bytes
Witam Bart Ogryczak wrote: >> czy to liczba ? - NIE > > No wlasnie do konca tak prosto. Bo to, ze w jednym miejscu masz Inf, > nie znaczy, ze cale obliczenia sa NaN. Np. jesli masz 1/x, to dla x = > Inf masz zupelnie poprawny wynik (0). Bardzo słuszna uwaga. W szczególności, że 1/NAN jest NAN, a nie 0. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Wed, 17 Oct 2007 10:49
Date: Wed, 17 Oct 2007 10:49
21 lines
1833 bytes
1833 bytes
Witam Bart Ogryczak wrote: >> Mozesz powiedziec dlaczego wykroczenie po za rozmiar liczby jest takie >> istotne ? >> Ja u siebie mam to w dyszy - inf/nan ... - tyle ze to i tak nie liczba, >> wiec dla pythona zrzucam wyjatek - a ten co pisze program w pythonie >> wie, ze cos jest nie tak :) > > Wyjatki maja to do siebie, ze je mozez zlapac w procesie, w który je > wywaliles. Troche ciezko przeslac pythonowy wyjatek przez Pyro czy > inne SOAP. W zasadzie to się dotyczy przesyłania danych przez jakiekolwiek IPC. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Seweryn Habdank-Wojewódzki
Date: Wed, 17 Oct 2007 10:53
Date: Wed, 17 Oct 2007 10:53
29 lines
2174 bytes
2174 bytes
Witam Grzegorz Makarewicz wrote: > # Inf > inf = Decimal(1) / Decimal(0) > print inf Czy to nie jest zły wynik? > Pewnie chciałbyś te informacje mieć prosto z rozszerzeń napisanych w C ? Nie zależy mi. Chcę mieć to DOBRZE obsłużone. > Jeżeli nie chcesz korzystać z wyjątków to nie masz szansy na wyłapanie > tych przypadków: Nie wiem. Jeszcze nie użyłem tego co podał Pan Karpierz, ale zapowiada się sensownie patrząc po kodzie. Więc może i da się to obsłużyć bez wyjątków. Przyczym nie chodzi o to, aby dla jakiejś chorej idei nie używać wyjątków, chodzi o to, aby móc obłużyć takie sytuacje DOBRZE i możliwie (?) swobodnie -- z naciskiem na DOBRZE, a swoboda przy okazji. Pozdrawiam. -- |\/\/| Seweryn Habdank-Wojewódzki \/\/
Re: przypisac nieskonczonosc
Author: Sulsa
Date: Thu, 18 Oct 2007 08:36
Date: Thu, 18 Oct 2007 08:36
23 lines
1598 bytes
1598 bytes
On Tue, 16 Oct 2007 16:07:03 -0000 Marcin Ciura <mciura@gmail.com> wrote: > On Oct 16, 10:34 am, Sulsa <su...@dontmail.me> wrote: > > Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość > > +nieskonczoność > > Jesli potrzebujesz tej nieskonczonosci tylko do porownan > i nie bedziesz na niej wykonywac operacji arytmetycznych, to: > > class Infinity(int): > def __cmp__(self, other): > if isinstance(other, self.__class__): return self - other > return self > > MinusInf = Infinity(-9999) > PlusInf = Infinity(+9999) > > Rozszerzenie klasy o metody __str__() i __repr__() > to cwiczenie dla czytelnika, ktoremu sa one potrzebne. > Marcin Musialem ja niestety przekazac do metody w c wiec taka klasa odpada.
Re: przypisac nieskonczonosc
Author: maciektorun2004
Date: Mon, 25 Mar 2019 15:41
Date: Mon, 25 Mar 2019 15:41
7 lines
1554 bytes
1554 bytes
W dniu wtorek, 16 października 2007 10:34:16 UTC+2 użytkownik Sulsa napisał: > Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość > +nieskonczoność > > -- 1e300*1e300 na windows działa
Re: przypisac nieskonczonosc
Author: AK
Date: Mon, 25 Mar 2019 19:19
Date: Mon, 25 Mar 2019 19:19
21 lines
1258 bytes
1258 bytes
On 2019-03-25 16:41, maciektorun2004@gmail.com wrote:
> W dniu wtorek, 16 października 2007 10:34:16 UTC+2 użytkownik Sulsa napisał:
>> Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość
>> +nieskonczoność
>>
>> --
>
> 1e300*1e300 na windows działa
>
import math
math.inf
mozna tez:
float("inf")
ale math.inf naturalniej/lepiej
PS: math.inf == float('inf')
AK
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads