Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

przypisac nieskonczonosc

565 views
Skip to first unread message

Sulsa

unread,
Oct 16, 2007, 4:34:16 AM10/16/07
to
Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość
+nieskonczoność

--

Bart Ogryczak

unread,
Oct 16, 2007, 5:21:04 AM10/16/07
to
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.

Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 6:02:15 AM10/16/07
to
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
\/\/

Bart Ogryczak

unread,
Oct 16, 2007, 7:20:01 AM10/16/07
to
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


Adam Mikuta

unread,
Oct 16, 2007, 7:27:35 AM10/16/07
to
Dnia 16.10.2007 Bart Ogryczak <B.Ogr...@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ć".

Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 8:03:20 AM10/16/07
to
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 ;-).

Bart Ogryczak

unread,
Oct 16, 2007, 8:38:22 AM10/16/07
to
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

Bart Ogryczak

unread,
Oct 16, 2007, 8:41:15 AM10/16/07
to
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?


Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 9:07:44 AM10/16/07
to
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).

Adam Karpierz

unread,
Oct 16, 2007, 10:16:19 AM10/16/07
to

Bart Ogryczak

unread,
Oct 16, 2007, 10:25:06 AM10/16/07
to
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.


Adam Karpierz

unread,
Oct 16, 2007, 11:11:51 AM10/16/07
to

Marcin Ciura

unread,
Oct 16, 2007, 12:07:03 PM10/16/07
to
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

Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 12:40:50 PM10/16/07
to
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.

Grzegorz Makarewicz

unread,
Oct 16, 2007, 3:11:45 PM10/16/07
to

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

Adam Karpierz

unread,
Oct 16, 2007, 3:28:18 PM10/16/07
to
"Grzegorz Makarewicz" <m...@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


Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 3:30:49 PM10/16/07
to
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.

Grzegorz Makarewicz

unread,
Oct 16, 2007, 3:43:51 PM10/16/07
to

ja tam tego pythona bardzo praktycznie wykorzystuje - od teorii sa inni :)

mak

Grzegorz Makarewicz

unread,
Oct 16, 2007, 3:46:45 PM10/16/07
to

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

Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 3:53:36 PM10/16/07
to
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.

Grzegorz Makarewicz

unread,
Oct 16, 2007, 4:05:18 PM10/16/07
to
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

Seweryn Habdank-Wojewódzki

unread,
Oct 16, 2007, 4:46:59 PM10/16/07
to
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ć.

Grzegorz Makarewicz

unread,
Oct 17, 2007, 4:58:58 AM10/17/07
to
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

Krzysztof Stachlewski

unread,
Oct 17, 2007, 5:01:26 AM10/17/07
to
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

Grzegorz Makarewicz

unread,
Oct 17, 2007, 5:29:41 AM10/17/07
to
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

Bart Ogryczak

unread,
Oct 17, 2007, 6:37:34 AM10/17/07
to

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.


Bart Ogryczak

unread,
Oct 17, 2007, 6:41:16 AM10/17/07
to
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).

Seweryn Habdank-Wojewódzki

unread,
Oct 17, 2007, 6:48:31 AM10/17/07
to
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.

Seweryn Habdank-Wojewódzki

unread,
Oct 17, 2007, 6:49:26 AM10/17/07
to
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.

Seweryn Habdank-Wojewódzki

unread,
Oct 17, 2007, 6:53:07 AM10/17/07
to
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.

Sulsa

unread,
Oct 18, 2007, 4:36:34 AM10/18/07
to

Musialem ja niestety przekazac do metody w c wiec taka klasa odpada.

Message has been deleted

AK

unread,
Mar 25, 2019, 3:19:17 PM3/25/19
to
On 2019-03-25 16:41, maciekt...@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


0 new messages