Jump to content
php.lv forumi

Atrasts internetā


briedis

Recommended Posts

  • Replies 546
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

 

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"

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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. :)

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...