🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
33 messages
33 total messages Started by Sulsa Tue, 16 Oct 2007 08:34
przypisac nieskonczonosc
#21394
Author: Sulsa
Date: Tue, 16 Oct 2007 08:34
4 lines
811 bytes
Jak liczbie zmiennoprzecinkowej w pythonie przypisac wartość
+nieskonczoność

-- 
Re: przypisac nieskonczonosc
#21395
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 09:21
12 lines
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
#21396
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 10:02
19 lines
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
#21397
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 11:20
28 lines
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
#21419
Author: Adam Mikuta
Date: Tue, 16 Oct 2007 11:27
14 lines
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
#21398
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 12:03
34 lines
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
#21420
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 12:38
9 lines
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
#21399
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 12:41
29 lines
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
#21400
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 13:07
54 lines
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
#21421
Author: Adam Karpierz
Date: Tue, 16 Oct 2007 14:16
5 lines
982 bytes
hint: fpconst

http://cheeseshop.python.org/pypi/fpconst

AK
Re: przypisac nieskonczonosc
#21401
Author: Bart Ogryczak
Date: Tue, 16 Oct 2007 14:25
38 lines
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
#21422
Author: Adam Karpierz
Date: Tue, 16 Oct 2007 15:11
5 lines
1041 bytes
Tu nowsza nieco wersja:

http://sourceforge.net/project/showfiles.php?group_id=71248

AK
Re: przypisac nieskonczonosc
#21423
Author: Marcin Ciura
Date: Tue, 16 Oct 2007 16:07
18 lines
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
#21402
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 16:40
63 lines
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
#21403
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 19:11
76 lines
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
#21404
Author: Adam Karpierz
Date: Tue, 16 Oct 2007 19:28
11 lines
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
#21406
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 19:30
55 lines
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
#21405
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 19:43
18 lines
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
#21407
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 19:46
62 lines
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
#21408
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 19:53
39 lines
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
#21409
Author: Grzegorz Makarewicz
Date: Tue, 16 Oct 2007 20:05
48 lines
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
#21410
Author: Seweryn Habdank-Wojewódzki
Date: Tue, 16 Oct 2007 20:46
56 lines
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
#21411
Author: Grzegorz Makarewicz
Date: Wed, 17 Oct 2007 08:58
34 lines
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
#21412
Author: Krzysztof Stachlewski
Date: Wed, 17 Oct 2007 09:01
33 lines
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
#21413
Author: Grzegorz Makarewicz
Date: Wed, 17 Oct 2007 09:29
22 lines
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
#21417
Author: Bart Ogryczak
Date: Wed, 17 Oct 2007 10:37
70 lines
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
#21415
Author: Bart Ogryczak
Date: Wed, 17 Oct 2007 10:41
59 lines
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
#21416
Author: Seweryn Habdank-Wojewódzki
Date: Wed, 17 Oct 2007 10:48
19 lines
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
#21418
Author: Seweryn Habdank-Wojewódzki
Date: Wed, 17 Oct 2007 10:49
21 lines
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
#21414
Author: Seweryn Habdank-Wojewódzki
Date: Wed, 17 Oct 2007 10:53
29 lines
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
#21424
Author: Sulsa
Date: Thu, 18 Oct 2007 08:36
23 lines
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
#21425
Author: maciektorun2004
Date: Mon, 25 Mar 2019 15:41
7 lines
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
#21426
Author: AK
Date: Mon, 25 Mar 2019 19:19
21 lines
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