🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.python
Article #452

Re: Bledne zaokraglanie ulamkow

#452
From: Marcin 'Qrczak' Kowalczyk
Date: Sun, 29 Dec 2002 10:43
64 lines
3477 bytes
Sat, 28 Dec 2002 03:43:52 +0100, Marcin Wojtczuk <fastviper@telkab.pl> pisze:

>> Bo 31.97 nie jest reprezentowalne w typie double w C,
> 
> Bzdura:
> Po pierwsze:
> 31,97 = $1F.61 = $1.F61 * 16.

Nieprawda. $1F.61 = 31.37890625, a nie 31.97. 97/100 nie jest
reprezentowalne ułamkiem z mianownikiem będącym potęgą dwójki,
więc nie jest reprezentowalne w dwójkowym zmiennopozycyjnym typie
o żadnej dokładności. Tak jak 1/3 nie jest reprezentowalne w systemie
dziesiętnym w żadnej skończonej liczbie cyfr.

>    /* Number of decimal digits of precision in a double */
> #define DBL_DIG 15
> #v-
> (cytat z float.h). Czyli każda liczba o mniej niż 15 cyfrach po przecinku
> jest w double reprezentowana DOKŁADNIE.

Bzdura. Znaczy to tylko tyle, że dla każdej takiej liczby istnieje
taka wartość typu double, która zaokrąglona do 15 cyfr dziesiętnych
da tę liczbę z powrotem.

> Python ma jakieś niejasne zasady precyzji artmetyki. Ktoś wie jakie ?

Takie jak C.

>> Po przetłumaczeniu na ułamek dziesiętny widać, że to ciut mniej
>> niż 31.97; następna reprezentowalna wartość jest ciut większa niż
>> 31.97. Więc co chcesz uzyskać? Dokładna liczba 31.97 w typie float
>> nie istnieje.
> 
> Taak ?
> #v+
>    /* Number of decimal digits of precision in a float */
> #define FLT_DIG 6

Mam na myśli float Pythona, czyli double C, ale sytuacja jest
analogiczna.

>> str pokazuje o jedną mniej cyfr niż repr, więc str od Twojej liczby
>> da '31.97'. Więc nie przejmuj się, że jak się ją wpisze w prompcie,
>> to widać więcej cyfr (to jest wyświetlane przez repr).
> 
> Fajnie by było wiedzieć jaką logiką kieruje się tutaj python.

str: żeby liczba o małej liczbie dziesiętnych cyfr po przecinku była
pokazana właśnie w taki sposób - bo najprawdopodobniej taka liczba
powstała przez zaokrąglenie odpowiedniej liczby dziesiętnej.

repr: żeby można było dokładnie odtworzyć liczbę z jej tekstowej
reprezentacji.

Można było zrobić lepiej, tak jak to robi np. Glasgow Haskell Compiler,
co jest trudniejsze w realizacji. Mianowicie pokazywać zawsze liczbę
w 15 cyfrach dziesiętnych, o ile konwersja takiej reprezentacji
z powrotem na double dałaby ten sam wynik, i w 16, jeśli nie. Daje
to obie zalety równocześnie.

-- 
   __("<         Marcin Kowalczyk
   \__/       qrczak@knm.org.pl
    ^^     http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID: <slrnb0tkec.a1h.qrczak@qrnik.zagroda>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.tpinternet.pl!news.tpi.pl!nnrpd
References: <3e09e4d7.2127062@news.icpnet.pl> <slrnb0jrgs.u54.qrczak@qrnik.zagroda> <853jua-58g.ln@fastviper.viper.lan>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!newsfeed01.sul.t-online.de!t-online.de!newsfeed.tpinternet.pl!news.tpi.pl!nnrpd
From: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl>
Newsgroups: pl.comp.lang.python
Subject: Re: Bledne zaokraglanie ulamkow
Date: Sun, 29 Dec 2002 10:43:24 +0000 (UTC)
Organization: Klub Nieszkodliwych Manjaków
Lines: 64
Message-ID: <slrnb0tkec.a1h.qrczak@qrnik.zagroda>
References: <3e09e4d7.2127062@news.icpnet.pl> <slrnb0jrgs.u54.qrczak@qrnik.zagroda> <853jua-58g.ln@fastviper.viper.lan>
NNTP-Posting-Host: paf87.warszawa.sdi.tpnet.pl
Mime-Version: 1.0
X-Trace: news.tpi.pl 1041158690 9408 217.96.225.87 (29 Dec 2002 10:44:50 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Sun, 29 Dec 2002 10:44:50 +0000 (UTC)
X-Path-Notice: Path line has been filtered
X-Original-Path: localhost!not-for-mail
User-Agent: slrn/0.9.7.4 (Linux)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit