Dyskusja:Literał liczbowy

message: Wydaje mi się, że uogólnienie, że literały z 'e' są 'float' a z kropką ale bez 'e' 'fixed', jest trochę błędne. Z przykładowych języków jest tak w PL/I, w reszcie nie są rozróżniane. 
* Podobnie jak PL/I jest w SQLu:
 select  floor((0.1e0 + 0.7e0) * 10.0e0), floor((0.1+0.7)*10.0)
 daje
 7   8
* W popularnych językach posiadających typ 'fixed'('decimal') (np. vb,c#) typ literału precyzowany jest sufiksem.
* W Adzie występowanie 'e' też nie ma znaczenia.
royas (dyskusja) 13:26, 10 lip 2008 (CEST)
To może jeszcze raz napisze. Uważam, że sekcja Reprezentacja znakowa liczb dziesiętnych jest napisana błędnie. To nie jest tak, że istnieją trzy rodzaje literałów liczbowych o pewnych postaciach, i niektóre języki utożsamiają te rodzaje ze sobą. Tylko istnieją języki, w których istnieją typy, i dla typów mogą istnieć literały, które mają pewną postać. Nie można pisać, że 1.1 to literał całkowity 1.1e0 to float, ale w niektórych językach 1.1 jest traktowany jako uproszczony zapis float; gdy np. w c# oba to floaty, a decimalem(fixed) jest zarówno 1.1m jak i 1.1e0m.
royas (dyskusja) 13:27, 11 lip 2008 (CEST)
Przyznaję, że nie do końca rozumiem zastrzeżenia i moim zdaniem:
* ten artykuł dotyczy literałów, a więc notacji - jednostki leksykalnej rozpatrywanej - na ile to możliwe - odrębnie od kontekstu w kodzie źródłowym w jakim występuje,
* fakt występowania w matematyce notacji liczb: całkowitej, dziesiętnej (fixed) i wykładniczej (float) ma swoje odzwierciedlenie w językach programowania w notacji liczb (literałach liczbowych) w kodach źródłowych (a artykuł dotyczący literału - moim zdaniem - odnosi się właśnie do zagadnienia notacji)
* "Tylko istnieją języki, w których istnieją typy, i dla typów mogą istnieć literały" - zagadnienie występowania typów i literałów jakie mogą reprezentować wartości dla tych typów winno być - moim zdaniem - ujęte w opisie danego typu z odniesieniem (linkiem) do artykułu o danym rodzaju literałów i ewentualnym uszczegółowieniem (wybraniem) konkretnego rozwiązania, a nie w opisie literału,
* "Nie można pisać, że 1.1 to literał całkowity (w artykule jest: stałopozycyjny) 1.1e0 to float, ale w niektórych językach 1.1 jest traktowany jako uproszczony zapis float" - tak jest w wielu językach, C# nie znam więc nie mogę się ustosunkować,
* rzeczywiście wskazane byłoby aby uzupełnić artykuł o zapis literałów liczbowych z sufiksem precyzującym typ literału.
(Joee (dyskusja) 19:49, 31 lip 2008 (CEST))
Terminy zmienno- i stałopozycyjny(-przecinkowy) dotyczą sposobu reprezentacji, a nie notacji. Czy literał 1.0e0 nie powinien się nazywać wykładniczym? a o zminnopozycyjności możnaby mówić dopiero w kontekscie konkretnego języka który nadaje takiemu literałowi typ np. float?
royas (dyskusja) 14:21, 1 sie 2008 (CEST)
Możliwe, nie miałbym nic przeciwko takiemu przemianowaniu. Ja w każdym razie w literaturze spotykałem oba określenia na taki zapis (wykładniczy i zmiennopozycyjny, czasem naukowy i inne), wybrałem tę nazwę (termin), który wydawał mi się bliższy informatyce niż matematyce. (Joee (dyskusja) 09:39, 2 sie 2008 (CEST))
Przeglądnąłem trochę literaturę i sądzę, że jednak podział w takiej formie jak jest, nie jest poprawny. 
Coś takiego jak Ll nie istnieje poza językiem programowania. Nie jest to coś jak znak +, który wygląda jak +, o którym można powiedzieć, że w większości języków jest operatorem dodawania, a czasem łączenia napisów. Z literałem jest trochę inaczej. Nie można stwierdzić niezależnie od języka jak wygląda.
Nie można powiedzieć, że napis cyfry.cyfry jest literałem fixed, który często jest traktowany jako float, bo w danym języku on jest po prostu literałem float. Myślę, że poprawniej byłoby napisać, że literały liczbowe, odpowiadają typom liczbowym danego języka i podać kilka konwencji, np. C(++,#) - obecność lub brak kropki + sufiksy, pl/1 - obecność lub brak e. Ale nie podawać "definicji" poszczególnych typów - czyli skasować te EBNFy. Natomiast podział ze względu tylko na notacja i w oderwaniu od typów i semantyki literałów uważam za bezcelowy. royas (dyskusja) 17:01, 12 sie 2008 (CEST)
Nie bardzo nadal rozumiem, dlaczego bezcelowy jest opis występującego ewidentnie pojęcia - literału liczbowego - z podziałem na rodzaje takich literałów? Taki podział występuję w literaturze przedmiotu dotyczących języków programowania (języków ogólnie, wielu języków, a nie jednego, pojedynczego, arbitralnie wybranego języka), np.:
# Michael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krysyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1342-7, s. 137
# John E. Nicholls, Strukrura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ISBN 83-204-0246-8, s. 150-153
# Władysław Turski, Propedeutyka Informatyi, PWN, W-wa 1977, wyd. II, s. 47,
Poniweaż ten tekst opisuje liteał liczbowy w kontekcie wszystkich języków programowania (a przynajmniej możliwie dużej liczbie) to jest uogólnieniem, to że w wielu konkretnych językach nie ma podziału na literały stało- i zmienno- pozycyjne ma odzwierciedlenie w talbeli zestawczej języków (Joee (dyskusja) 11:01, 19 sie 2008 (CEST)).
Ponadto nie mogę zgodzić się ze stwierdzeniami:
* "Nie można stwierdzić niezależnie od języka jak wygląda" - można w pewnym podanym tu uogulnieniu a dalej można podać jak w tabeli wyjątki,
* " Nie można powiedzieć, że napis cyfry.cyfry jest literałem fixed, który często jest traktowany jako float, bo w danym języku on jest po prostu literałem float" - tak, w danym języku jest float, ale w uogólnieniu jest to literał fixed tylko dany język może go nie wyróżniać bo akturat w tym języku nie ma takiej potrzeby, ale to nie oznacza, że ogólnie to nie jest literał stałopozycyjny, dziesiętny, nie piszemy w tej części o danym języku tylko piszemy w ogóle o językach, a o konkretnym języku jest w tabeli,
* "poprawniej byłoby napisać, że literały liczbowe, odpowiadają typom liczbowym danego języka" - to - moim zdaniem nieprawda - np. w języku Pascal: var a:real; ... a:=1; - napis 1 jest literałem całkowitym, a nie rzeczywistym, nie odpowiada typowi real, dopiero translator go przekształci do typu real, co wynika z kontekstu, ale to literału całkowitego nie robi literałem rzeczywistym, zresztą jak widać powyższy literał może odpowiadać dwóm róznym typom,
* "podział ze względu tylko na notacja" - czym jest literał - z definicji literału jest to właśnie notacja i jej zasady.
Także i dlatego nie rozumiem nadal powyższych zastrzeżeń (Joee (dyskusja) 15:17, 19 sie 2008 (CEST)).
Przeczytałem jeszcze raz swoje wypowiedzi w tej dyskusji i chciałem zauważyć, że nigdzie nie mówię, że opis literału l. jest bezcelowy. Zastrzeżenia mam jedynie do podziału. W tym momencie podział w artykule wydaje mi się pomieszaniem podziału ze względu na notację i podziału ze względu na znaczenie. Konkretnie: z artykułu bardziej wynika, że chodzi o znaczenie:
*Ze względu na typ wartości liczbowej wyróżnia się literały liczbowe
*podstawowe nazewnictwo rodzajów
*w tabelce rozdzielenie fixed od float dla pl/1, brak rozdzielenia dla innych; informacja o braku typu calkowitego w pl/1.
z drugiej strony z dyskusji wynika, że raczej chodzi o podział wynikający tylko z postaci literału.
*Co do uogólnień: jeśli mało przypadków pasuje do uogólnionego schematu, a bardzo dużo podpada pod wyjątki, to uogólnienie może być za mało ogólne (tzn. zawierać zbyt wiele szczegółów) lub być po prostu niepoprawne. Zgadzam się, że rodzaje literałów liczbowych są pewnym uogólnieniem tych występujących w j.p., ale definicje tych rodzajów (opisy z jakich znaków składa się dany rodzaj + EBNF) nie są zgodne z większością przypadków. Nie są więc uogólnieniem, a narzuconym arbitralnie podziałem, do którego naciągana jest rzeczywistość. Wychodzi na to, że w większości języków jest float, ale w uogólnieniu jest fixed. Problem moim zdaniem wynika ze wspomnianego już pomieszania dwóch różnych podziałów. Byłoby prawie dobrze gdyby wyrzucić te szczegółowe opisy/definicje poszczególnych rodzajów. 
*Nie rozumiem co ma pokazywać przykład w Pascalu. Chodziło mi o to, że ogólnie w danym języku literały będą miały typy mniej więcej takie jakimi typami danych liczbowych dysponuje język.
royas (dyskusja) 11:50, 20 sie 2008 (CEST)
Rzeczywiście słowo typ w podziale jest mylące z typem danych (Joee (dyskusja) 15:27, 20 sie 2008 (CEST))

message: <integer> ::= ['-' | '+'] <digit> {<digit>}
<fixed> ::= [<integer>] <dot> [<digit> {<digit>}]
Wzorzec <fixed> określa, że prawidłowy jest zapis: "." lub "-20.", ale nie "-.4", bo element <digit> w <integer> jest wymagany, a jeśli chcemy podać "-" to elementu <integer> musimy użyć.
thread_title:  wzorzec