{"id":23343,"date":"2017-01-22T17:31:29","date_gmt":"2017-01-22T16:31:29","guid":{"rendered":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/?page_id=23343"},"modified":"2017-01-22T17:31:29","modified_gmt":"2017-01-22T16:31:29","slug":"06-typy-danych","status":"publish","type":"page","link":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/projekty\/fortran-dla-uzytkownikow-mes\/06-typy-danych\/","title":{"rendered":"06 Typy danych"},"content":{"rendered":"<p>Polecenia j\u0119zyk\u00f3w programowania za zwyczaj odnosz\u0105 si\u0119 do r\u00f3\u017cnego rodzaju danych.<br \/>\nWwewn\u0119trzna organizacja wsp\u00f3\u0142czesnych komputer\u00f3w jest binarna (dw\u00f3jkowa). Oznacza to, \u017ce wszystkie dane zapisywane s\u0105 w formatach binarnych. Standardowo, komputery mog\u0105 operowa\u0107 na danych typu ca\u0142kowitoliczbowego oraz na danych typu nieca\u0142kowitego.<br \/>\nStandardowa matematyka operuje znacznie bogatszym zestawem danych. Rozr\u00f3\u017cniamy:<\/p>\n<ul>\n<li><b>Liczby naturalne<\/b>; wed\u0142ug Kroneckera <i>Dobry B\u00f3g stworzy\u0142 liczby naturalne, inne s\u0105 dzie\u0142em cz\u0142owieka<\/i>; liczb naturalnych u\u017cywamy do liczenia przedmiot\u00f3w; zbi\u00f3r liczb naturalnych jest zamnkni\u0119ty ze wzgl\u0119du na opearcje dodawania i mno\u017cenia (\u017cadna z tych operacji nie wyprowadza poza zbi\u00f3r).<\/li>\n<li><b>Liczby ca\u0142kowite<\/b> s\u0105 naturalnym rozszerzeniem liczb naturalnych; zawieraj\u0105 zero i \u201eujemne liczby naturalne\u201d; zbi\u00f3r liczb ca\u0142kowitych jest zamkniety r\u00f3wnie\u017c ze wzgl\u0119du na operacj\u0119 odejmowania;<\/li>\n<li><b>Liczby wymierne<\/b> to rozszerzenie zbioru liczb ca\u0142kowitych skonstruowane tak, \u017ceby powsta\u0142y zbi\u00f3r by\u0142 zamkni\u0119ty ze wzgl\u0119du na na cztery podstawowe operacje arytmetyczne: dodawanie, odejmowanie, mno\u017cenie i dzielenie (liczby wymierne to wszystkie liczby postaci <i>p\/q<\/i>, gdzie <i>p<\/i> jest ca\u0142kowite, a <i>q<\/i> ca\u0142kowite i r\u00f3\u017cne od zera;<\/li>\n<li>Korzystaj\u0105c wy\u0142\u0105cznie z liczb wymiernych nie da si\u0119 \u201ezmierzy\u0107\u201d d\u0142ugo\u015bci przek\u0105tnej kwadratu o jednostkowym boku. Zbi\u00f3r <b>liczb rzeczywistych<\/b> jest naturaln\u0105 domen\u0105 rachunk\u00f3w r\u00f3\u017cniczkowego i ca\u0142kowego.<\/li>\n<\/ul>\n<p>Doda\u0107 trzeba, \u017ce zbiory liczb naturalnych, ca\u0142kowitych i wymiernych s\u0105 r\u00f3wnoliczne a ka\u017cdy z nich zawiera niesko\u0144czenie wiele element\u00f3w.<br \/>\nKomputery we wszystkich swoich obliczeniach korzystaj\u0105 albo ze <strong>sko\u0144czonego<\/strong> podzbioru liczb ca\u0142kowitych albo ze <strong>sko\u0144czonego<\/strong> podzbioru liczb wymiernych. Pierwsze liczby nazywane s\u0105 w Fortranie INTEGER, a drugie \u2014 REAL.<\/p>\n<p>J\u0119zyk Fortran zna nast\u0119puj\u0105ce typy danych:<\/p>\n<ul>\n<li><tt>INTEGER<\/tt> og\u00f3lnie typ ca\u0142kowity, w szczeg\u00f3lnych przypadkach mo\u017cna zadeklarowa\u0107 ile bajt\u00f3w zostanie zu\u017cytych na warto\u015bci; do wyboru s\u0105 warto\u015bci 1 (8 bit\u00f3w), 2 (16 bit\u00f3w), 4 (32 bity) i 8 (64 bity):\n<ul>\n<li><tt>INTEGER*1<\/tt><\/li>\n<li><tt>INTEGER*2<\/tt><\/li>\n<li><tt>INTEGER*4<\/tt><\/li>\n<li><tt>INTEGER*8<\/tt><\/li>\n<\/ul>\n<\/li>\n<li><tt>REAL<\/tt> \u2014 og\u00f3lnie tyb \u201erzeczywisty\u201d; do zapisu mo\u017cna u\u017cywa\u0107 32, 64 albo 128 bit\u00f3w:\n<ul>\n<li><tt>REAL*4<\/tt><\/li>\n<li><tt>REAL*8<\/tt><\/li>\n<li><tt>REAL*16<\/tt><\/li>\n<\/ul>\n<\/li>\n<li><tt>DOUBLE PRECISION<\/tt> czyli <tt>REAL*8<\/tt> \u2014 liczby \u201erzeczywiste\u201d podw\u00f3jnej precyzji<\/li>\n<li><tt>COMPLEX<\/tt> \u2014 liczby zespolone i <tt>DOUBLE COMPLEX<\/tt> \u2014 zespolone podw\u00f3jnej precyzji<\/li>\n<li><tt>LOGICAL<\/tt> \u2014 typ s\u0142u\u017c\u0105cy do zapisu warto\u015bci logicznych (i znowu mimo, \u017ce do zapisu warto\u015bci logicznej wystarczy\u0142by jeden bit, wykorzystuje si\u0119 \u2014 podobnie jak w przypadku warto\u015bci ca\u0142kowitych \u2014 1, 2, 4 lub 8 bajt\u00f3w.<\/li>\n<li><tt>CHARACTER<\/tt> \u2014 ka\u017cda litera kodowana jest jako liczba ca\u0142kowita. Typ typu <tt>CHARACTER<\/tt> przechowa\u0107 mo\u017ce jeden znak.<\/li>\n<\/ul>\n<p>Jedn\u0105 z najgorszych cech Fortranu (ale wiem to dopiero po latach) jest brak konieczno\u015bci deklaracji nazw zmiennych i ich typ\u00f3w. Powoduje to, \u017ce nast\u0119puj\u0105cy kod jest opoprawny:<\/p>\n<div class=\"zim-object\">\n<pre class=\"brush: fortran;\">1&nbsp;  program test\r\n2&nbsp;  i = 3\t\t! W tym miejscu deklaruj\u0119 zmienn\u0105 ca\u0142kowit\u0105 i, a anst\u0119pnie nadaj\u0119 jej warto\u015b\u0107\r\n3&nbsp;  print *, i*2\r\n4&nbsp;  end program test<\/pre>\n<\/div>\n<p>Po prostu zak\u0142\u0105da si\u0119, \u017ce zmienne skalarne o nazwach zaczynaj\u0105cych si\u0119 od litery <tt>I, J, K, L, M, N<\/tt> s\u0105 ca\u0142kowite, a pozosta\u0142e (nazwy zaczynaj\u0105ce si\u0119 od pozosta\u0142ych liter) \u2014 rzeczywiste. By\u0107 mo\u017ce jest to wygodne, ale prowadzi do wielu nieporozumie\u0144 i b\u0142\u0119d\u00f3w.<\/p>\n<p>Zwracam r\u00f3wnie\u017c uwag\u0119, \u017ce opr\u00f3cz typ\u00f3w \u201epodstawowych\u201d (<tt>INTEGER<\/tt>, <tt>REAL<\/tt>, <tt>LOGICAL<\/tt>) mo\u017cna u\u017cywa\u0107 typ\u00f3w specyficznych, deklaruj\u0105c ilo\u015b\u0107 pami\u0119ci niezb\u0119dnej do przechowania warto\u015bci. I tak <tt>INTEGER<\/tt> to b\u0119dzie typ ca\u0142kowity o d\u0142ugo\u015bci 4 bajt\u00f3w (32 bity) czyli <tt>INTEGER*4<\/tt>. Zmienna tego typu mo\u017ce s\u0142u\u017cy\u0107 do przechowywania warto\u015bci z zakresu od -2,147,483,648 do 2,147,483,647. Natomiast <tt>INTEGER*2<\/tt> (16 bt\u00f3w) jest w stanie s\u0142u\u017cy\u0107 do przechowywania warto\u015bci ca\u0142kowitych z zakresu od -32,768 do 32,767. <tt>INTEGER*8<\/tt> to oczywi\u015bcie liczby ca\u0142kowite sze\u015b\u0107dziesi\u0119cioczerobitowe.<\/p>\n<p>Podobnie z typem <tt>REAL<\/tt> \u2014 odpowiada to trzydziestodwubitowym liczbom zmiennoprzecinkowym z zakresu od 1.17549435E-38 do 3.40282347E38 czyli jest to typ <tt>REAL*4<\/tt>. typ <tt>DOUBLE PRECISION<\/tt> to inaczej <tt>REAL*8<\/tt> przechowywa\u0107 mo\u017ce warto\u015bci z zakresu 2.2250738585072013D-308 do 1.7976931348623158D308.<\/p>\n<p>Wydaje mi si\u0119, \u017ce spos\u00f3b zapisu danych mo\u017ce budzi\u0107 wiele w\u0105tpliwo\u015bci. SUgeruj\u0119 nast\u0119puj\u0105ce lektury dodatkowe:<\/p>\n<ol start=\"1\" type=\"1\">\n<li>Liczby ca\u0142kowite dodatnie i ze znakiem: <a class=\"https\" title=\"od slajdu 52\" href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/ti02_arytmetyka_beamer.pdf#page=52\">od slajdu 52<\/a><\/li>\n<li>Liczby zmiennoprzecinkowe:\n<ol start=\"1\" type=\"a\">\n<li>podstawowe informacje: <a class=\"https\" title=\"prawie ca\u0142y wyk\u0142ad\" href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/10\/ti03_ulamki_beamer.pdf\">prawie ca\u0142y wyk\u0142ad<\/a><\/li>\n<li>informacje zaawansowane: <a class=\"https\" title=\"na temat typ\u00f3w danych\" href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/09\/teoria.pdf#page=8\">na temat typ\u00f3w danych<\/a> (str. 8), <a class=\"https\" title=\"arytmetyka zmiennoprzecinkow i wp\u0142yw precyzji na wyniki\" href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-content\/uploads\/sites\/2\/2015\/09\/teoria.pdf#page=39\">arytmetyka zmiennoprzecinkow i wp\u0142yw precyzji na wyniki<\/a> (str. 39).<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>S\u0105 to wszystko dosy\u0107 podstawowe slajdy b\u0105d\u017a materia\u0142y do zaj\u0119\u0107 z Technologii Informacyjnych, Informatyki (czyli programowania w j\u0119zyku C) oraz z Metod Numerycznych. Postaram si\u0119 doda\u0107 bogatsze komentarze, pozwalaj\u0105ce lepiej zrozumie\u0107 problemy zwi\u0105zane z arytmetyk\u0105 komputer\u00f3w.<br \/>\nNatomiast podkre\u015bli\u0107 nale\u017cy, \u017ce standardowy typ <tt>REAL<\/tt> w j\u0119zyku Fortran (b\u0119d\u0105cy odpowiednikiem typu <tt>float<\/tt> w j\u0119zyku C) zapewnia niezbyt wielki zakres (1E38) i marn\u0105 precyzj\u0119: 24 cyfry dw\u00f3jkowe liczby w zapisie \u201enaukowym\u201d. Podkre\u015b\u0142i\u0107 trzeba, \u017ce te 24 cyfry t\u0142umacz\u0105 si\u0119 jako 6 (czasmi 7) znacz\u0105cych cyfr dziesi\u0119tnych. Nie jest to du\u017ca precyzja. Dopiero realizacja oblicze\u0144 z u\u017cyciem liczb podw\u00f3jnej precyzji (<tt>DOUBLE PRECISION<\/tt> albo <tt>REAL*8<\/tt> w j\u0119zyku Fortran albo <tt>double<\/tt> w j\u0119zyku C) pozwala osi\u0105gn\u0105\u0107 i wi\u0119kszy zakres liczb (1D308) jak i nieco wi\u0119cej cyfr znacz\u0105cych: 53 cyfry dw\u00f3jkowe, co t\u0142umaczy si\u0119 na 17 (a czasmi tylko 16) cyfr dziesi\u0119tnych.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Polecenia j\u0119zyk\u00f3w programowania za zwyczaj odnosz\u0105 si\u0119 do r\u00f3\u017cnego rodzaju danych. Wwewn\u0119trzna organizacja wsp\u00f3\u0142czesnych komputer\u00f3w jest binarna (dw\u00f3jkowa). Oznacza to, \u017ce wszystkie dane zapisywane s\u0105 w formatach binarnych. Standardowo, komputery mog\u0105 operowa\u0107 na danych typu ca\u0142kowitoliczbowego oraz na danych typu nieca\u0142kowitego. Standardowa matematyka operuje znacznie bogatszym zestawem danych. Rozr\u00f3\u017cniamy: Liczby naturalne; wed\u0142ug Kroneckera Dobry B\u00f3g &hellip; <a href=\"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/projekty\/fortran-dla-uzytkownikow-mes\/06-typy-danych\/\" class=\"more-link\">Czytaj dalej <span class=\"screen-reader-text\">06 Typy danych<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":23294,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ngg_post_thumbnail":0,"footnotes":""},"class_list":["post-23343","page","type-page","status-publish","hentry"],"publishpress_future_action":{"enabled":false,"date":"2026-04-19 13:58:01","action":"change-status","newStatus":"draft","terms":[],"taxonomy":"language","extraData":[]},"publishpress_future_workflow_manual_trigger":{"enabledWorkflows":[]},"_links":{"self":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/comments?post=23343"}],"version-history":[{"count":2,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23343\/revisions"}],"predecessor-version":[{"id":23345,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23343\/revisions\/23345"}],"up":[{"embeddable":true,"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/pages\/23294"}],"wp:attachment":[{"href":"https:\/\/kmim.wm.pwr.edu.pl\/myszka\/wp-json\/wp\/v2\/media?parent=23343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}