aika Posted April 3, 2008 Report Share Posted April 3, 2008 Pēkšni mans kods sācis taisīt mistiku: salīdzinot divus variabļus melo! (pirms tam viss bija ok) Salīdzināts tiek ar '<' Ja abi mainīgie vienādi - nostrādā kā true! Uzliku ka abi mainīgie pirmstam tiek apstrādāti ar doublval(); - nepalīdz! Kas par lietu???! Link to comment Share on other sites More sharing options...
andrisp Posted April 3, 2008 Report Share Posted April 3, 2008 (edited) Parādi taču kodu, kas tā dara. Un tu 100% pārliecinājies (izdrukājot mainīgo saturu pirms pašas salīdzināšanas), ka mainīgie ir vienādi ? Hmm.. Cik noprotu, tu floatus mēģini salīdzināt ? Varbūt tālakais ko rakstīšu būs pilnīgas muļķības, bet ar floatiem ir tā, ka tie nav precīzi. Tāpēc iespējams, ka izdrukājot viņi ir vienādi, bet salīdzināšanas operātors tomēr vienu no viņiem redz savādāk (neprecīzi, piemēram, 3 vietā 3.00000000000000003 vai ko tādu). Edited April 3, 2008 by andrisp Link to comment Share on other sites More sharing options...
Aleksejs Posted April 3, 2008 Report Share Posted April 3, 2008 Ieraksti kodu, kurā tas notiek. Ieskaitot tās vietas, kurās mainīgie dabū vērtības. Link to comment Share on other sites More sharing options...
aika Posted April 3, 2008 Author Report Share Posted April 3, 2008 Parādi taču kodu, kas tā dara. Un tu 100% pārliecinājies (izdrukājot mainīgo saturu pirms pašas salīdzināšanas), ka mainīgie ir vienādi ? jap! pat izķēru abus maniīgos ar javascriptu tieši pirms salīdzināšanas! Link to comment Share on other sites More sharing options...
aika Posted April 3, 2008 Author Report Share Posted April 3, 2008 Ieraksti kodu, kurā tas notiek. Ieskaitot tās vietas, kurās mainīgie dabū vērtības. nu kāds tur kods! ir mainīgais $a un mainīgais $b $a tiek iegūts kā paramters, kas nodots no citas lapas $b tiek iegūts no funkcijas abi parametri tika apstrādāti: $a = doubleval($a); $b = doubleval($b); salīdzināšana: if ($a<$b) {} Link to comment Share on other sites More sharing options...
bubu Posted April 3, 2008 Report Share Posted April 3, 2008 Mēs tev neticam. Dators nemēdz melot. Tas dara precīzi to, ko tam liek darīt. Parādi precīzas vērtības, kuras uzstādi un kā salīdzini. Link to comment Share on other sites More sharing options...
aika Posted April 3, 2008 Author Report Share Posted April 3, 2008 Parādi taču kodu, kas tā dara. Un tu 100% pārliecinājies (izdrukājot mainīgo saturu pirms pašas salīdzināšanas), ka mainīgie ir vienādi ? Hmm.. Cik noprotu, tu floatus mēģini salīdzināt ? Varbūt tālakais ko rakstīšu būs pilnīgas muļķības, bet ar floatiem ir tā, ka tie nav precīzi. Tāpēc iespējams, ka izdrukājot viņi ir vienādi, bet salīdzināšanas operātors tomēr vienu no viņiem redz savādāk (neprecīzi, piemēram, 3 vietā 3.00000000000000003 vai ko tādu). varbūtība itkā varētu pastāvēt, taču šoreiz tā nevare'tu būt: $a tiek ievadīts inputfieldā un izskatās piem šādi 2.55 $b tiek iegūts no funkcijas kas pie vienas doubles pieskaita otru (piem $b = 2.45 + 0.1); pats stulbākais ka tas kods nostrādāja 3 mēnešus, bet vakar sadirsās! (nav bijis pat PC restarts, vai tur tjip reg set maiņa) Link to comment Share on other sites More sharing options...
bubu Posted April 3, 2008 Report Share Posted April 3, 2008 Nu tādā gadījumā viss skaidrs. Te ir uzraksīta atbilde tavai problēmai: http://php.lv/f/index.php?showtopic=10133&...+neprec%C4%ABzi Īsumā - peldošā punkta skaitļi atmiņā reprezentējas binārā formā, nevis decimālā. Tāpēc decimālu skaitli ierakstot nevajag gaidīt, ka tas būs vienāds ar citu decimālā pieraksta skaitli. Link to comment Share on other sites More sharing options...
aika Posted April 3, 2008 Author Report Share Posted April 3, 2008 (edited) Lūdzu nevajag taisīt bezjēdzīgas QUOTEs vo bļins fakstakāds! Moš tad man tieši tos par stringiem pārtaisīt! enīvei tas neizskaidro kapēc tas viss nostrādāja 3 mēnešus :) bet paldies par virzienu! nu domāsim kā apčakarēt! Edited April 3, 2008 by bubu Link to comment Share on other sites More sharing options...
bubu Posted April 3, 2008 Report Share Posted April 3, 2008 Varbūt vienkārši "pareizas" vērtības padevi. Tb tādas uz kurām paveicās un viss nostrādāja. Par to apčakarēšanu - ja tu operē ar naudas summām, tad kā jau otrā topikā izteicās, dari to ar integer tipiem ar santīmiem (ja diapazons atļauj). Ar floatiem operēt ar naudu ir neprāts, tā nedrīkst. Link to comment Share on other sites More sharing options...
aika Posted April 3, 2008 Author Report Share Posted April 3, 2008 Varbūt vienkārši "pareizas" vērtības padevi. Tb tādas uz kurām paveicās un viss nostrādāja. arī tas tiesa! vakar jau pētīju - un tad jau skatījos ka tas nostrādāja tieši pie 2.55 < 2.45+0.1 :) Link to comment Share on other sites More sharing options...
bubu Posted April 3, 2008 Report Share Posted April 3, 2008 Pie 2.55 < 2.45+0.1 tas 100% nevar nostrādāt. Tur ir kāds cits gļuks. Floati nav tik neprecīzi. Tiem precizitāte parasti zūd pie 5 vai 6 zīmīgā cipara. Link to comment Share on other sites More sharing options...
Recommended Posts