jurchiks Posted April 18, 2016 Report Share Posted April 18, 2016 Nea, tur smuki raksta visu pa moduļiem un viss ir skaidrs un tīrs: https://pbs.twimg.com/media/CeVnsGlXIAANrZX.jpg:large Skumjākais ir tas, ka kaut kur reāli pastāv tāds kods (par šo skaidrs, ka parodija). Quote Link to comment Share on other sites More sharing options...
F3llony Posted April 18, 2016 Report Share Posted April 18, 2016 scala> 0.1+0.2 res0: Double = 0.30000000000000004 Nu tas jau ir floating point standarts un saistīts ar to kā atmiņā un procesora reģistros tiek glabāti flouting point mainīgie. Ja kaut kur 0.1+0.2 = 0.3, tad visdrīzāk pa virsu ir uztaisīts kaut kas, bet tad vairs tā skaitļošana nav tik ātra. P.S. Starp citu pasaule programmēšanas olimpiādē jau kādu laiku ir izņemti uzdevumi, kuros jāizmanto floating point mainīgie. Es zinu, ka standarts, bet es apšaubu, ka daudzi šeit sagaida tādu rezultātu... :P Un nav jau tikai absolūtie 0.1 un 0.2, bet arī daļas (kā piemērā). PHP pastarītis redz izvada 0.3. Skumjākais ir tas, ka kaut kur reāli pastāv tāds kods (par šo skaidrs, ka parodija). https://github.com/jezen/is-thirteen Quote Link to comment Share on other sites More sharing options...
codez Posted April 18, 2016 Report Share Posted April 18, 2016 (edited) PHP pastarītis redz izvada 0.3. Domāju, ka internaly PHP visdrīzāk glabā to pašu 0.30....04, bet pie izvades viltīgi noapaļo. P.S. yep, http://codepad.org/AZbcjiGw echo ((0.2+0.1)===0.3)?"Yes":"No"; Output: 1 No Edited April 18, 2016 by codez Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted April 18, 2016 Report Share Posted April 18, 2016 Dēļ tiem floatiem un īpatnībām ir gadījies, ka zūd vienības. Un to nemaz tik viegli nav uzķert, jo floorošanas tikai daļā gadījumu un dēļ īpatnējām starpsummām aktivizē kļūdu. Izvadot kā tekstu, piemēro string formatēšanu, kura apaļo ar round. Un arī What Every Computer Scientist Should Know About Floating-Point Arithmetic. echo 230 / 100 * 100; // 230 echo floor(230 / 100 * 100); // 229 echo 231 / 100 * 100; // 231 echo floor(231 / 100 * 100); // 231 Pārmest PHP par to, ka tajā ir daudz garbage koda, nav īsti pareizi. Jā, ir. Bet ir arī ļoti labi kodi un, mans uzskats, ka patiesībā PHP ir tas, kur programmētājam jābūt zinošākam, nekā C# vai Java programmētājam, kurās platforma un IDEs ierobežo daudzu muļķīgu kļūdu iespējamību, kamēr PHP ātri atmasko avantūras. Kaut vai tie paši datu tipi - PHP gadījumā ir jādomā līdzi, jāsaprot, kurā brīdī ir tie maģiskie momenti un, kāpēc, piemēram, $s = '0'; empty($s) == true un kāpēc tas ir labi. Quote Link to comment Share on other sites More sharing options...
Kasspars Posted April 18, 2016 Report Share Posted April 18, 2016 ^ Tā arī ir. Stingri tipētās valodas (aka Pascal) priekš iesācējiem PHP, JavaScript - priekš pro developeriem Quote Link to comment Share on other sites More sharing options...
F3llony Posted April 18, 2016 Report Share Posted April 18, 2016 Domāju, ka internaly PHP visdrīzāk glabā to pašu 0.30....04, bet pie izvades viltīgi noapaļo. P.S. yep, http://codepad.org/AZbcjiGw echo ((0.2+0.1)===0.3)?"Yes":"No"; Output: 1 No Nu es kaut ko tādu arī gaidīju. Tajā pašā laikā, PHP ir arī standarta risinājums - php > $x = bcadd(0.1, 0.2, 50); php > var_dump($x); string(52) "0.30000000000000000000000000000000000000000000000000" Quote Link to comment Share on other sites More sharing options...
Kasspars Posted April 18, 2016 Report Share Posted April 18, 2016 Un ko tu ar to gribi teikt, ka php kaut kādā veidā ir apgājuši floating point īpatnības? $x = bcadd(0.300000000000000004, 0.2, 50); var_dump($x); string(52) "0.50000000000000000000000000000000000000000000000000" Nē, vienkārši php sakārto, lai šī īpatnības neizlec. Kaut gan tas nav īsti labi, manuprāt Quote Link to comment Share on other sites More sharing options...
F3llony Posted April 18, 2016 Report Share Posted April 18, 2016 Kaspar neliels fail tev tur. Ieliec abus floatus pēdiņās as in string. <?php $x = bcadd('0.300000000000000004', '0.2', 50); var_dump($x); Quote Link to comment Share on other sites More sharing options...
Kasspars Posted April 18, 2016 Report Share Posted April 18, 2016 Tie ir float nevis stringi. Nelikšu pēdiņās Quote Link to comment Share on other sites More sharing options...
F3llony Posted April 18, 2016 Report Share Posted April 18, 2016 Tad ej dillēs. Tiem kam interesē - string reprezentācija tiek izmantota tāpēc, ka tad tiek garantēta precizitātes saglabāšana - gan tajā pašā, gan starp dažādām sistēmām, un vari būt drošs, ka reģistru izmērs nebūs faktors lai to floatu pieglabātu. Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted April 18, 2016 Report Share Posted April 18, 2016 We offer you to compete against PVS-Studio static analyzer by locating bugs in 15 source code fragments randomly selected from our database of open source projects. http://q.viva64.com/ Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted April 18, 2016 Report Share Posted April 18, 2016 Nu, konkrēti manā pašreizējā darbā IT jomā ir tikai 2 darbinieki, no kuriem viens esmu es, tā kā apmaiņa tāpat ikdienā notiek. Par Draugiem nezinu, bet pat ja tā ir, tad tas ir nenormāls retums. >Ja tu Tagad aizietu un pateiktu, hey mēs ik nedēļu stundu or divas piektdienas beigās te padalīsimies ar info un pamācīsimies ... domā tavs menedžeris tev pateiks nē? Zini... Ir zināmas darba vietas, kur pateiktu gan nē. Labākajā gadījumā pateiktu "tev jau tāpat ikdienā notiek apmaiņa ar kolēģiem". Tur tā lieta, ka cilvēks veidojas tāds, kādā vidē viņš atrodas. IT jomā pluss ir tāds, ka atver pārlūku un (nosacīti) izvēlies, kur atrasties. Darbavietā būtiski, lai būtu savstarpēji atbalstoša vide un kopīgas vērtības. Tās dažādiem cilvēkiem dažādās vietās var būt savādākas. Tāpat kā ir dažādas skolas un dažādas klases - vieniem ir labi skolā, kur ka tik ātrāk notīties, citiem pašsaprotami ir palikt ilgāk pēc stundām un pārrunāt teoriju. Tagad IT uzņēmumos vajadzētu būt iespējai tā, kā @F3llony raksta, jāpameklē tikai labāk. Un arī IT uzņēmuma iekšienē var būt diametrāli pretējas atmosfēras. Var jau mēģināt pats izrādīt iniciatīvu, bet pēc analoģijas ar skolu klasēm – vienā gadījumā tas izdosies, citā gadījumā naysaijeri vnk bolīs acis un noēdīs. :) Bet "I know the pain" un risinājums ir "avoid it!" Par tiem uzņēmumiem un menedžeriem, kas ir tik nepretimnākoši - žēl gan. Skaidrs taču, ka IT nav grīdas slaucīšana, kur nostrādāto stundu skaits atbilst produktivitātei, tāpēc pāris h nedēļā kopā sanākšanai tak pilnīgi neko neatņem. Gluži otrādi - rodas jaunas idejas un apņēmība. Jācer, ka konkrētajam menedžerim toreiz bija vienkārši neizdevusies diena. :) Quote Link to comment Share on other sites More sharing options...
jurchiks Posted April 18, 2016 Report Share Posted April 18, 2016 Nē, nebija gan neizdevusies diena, vienkārši nogruzīti ar uzdevumiem līdz pēdējam. Kas Latvijā, starp citu, ir baigi common; pašreizējā darbā arī, lai cik smieklīgi nebūtu, bet līdz manai atnākšanai vienam vienīgam čalim bija ap 15 projektiem jātaisa. Dažiem jāuzzīmē dizaini (viņš ir FULL-stack, ne tikai front+backend, bet arī dizainus zīmē) un pēc tam, kad saņems atbildi, tad jātaisa, dažiem jau dizaini ir un tikai jātaisa, dažiem kkas jāpielabo... Tagad es būšu otrais, kas daļu no tā paņems uz sevis, bet vienalga darba ir dafiga. Nesaprotu, kā tas čalis var būt tik pozitīvs, lai gan bez tā laikam neiztikt, reāli širmis aizietu ciet. Quote Link to comment Share on other sites More sharing options...
Kasspars Posted April 18, 2016 Report Share Posted April 18, 2016 Tu tak vari arī nestrādāt pie viņiem! Tas čalis, kas zīmē dizainu + programmē un vēl pie tam ir pozītīvs, ir reāls tīradnis. Iedod man viņa kontaktus! Quote Link to comment Share on other sites More sharing options...
jurchiks Posted April 19, 2016 Report Share Posted April 19, 2016 Un ko, tu viņam vēl darbu uzvelsi? :D Man steidzami vajadzēja darbu, nebija dižas izvēles, + teorētiski šis darbs varētu labi izskatīties CV. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.