- PHP изключения
WT форуми -> PHP MySQL ASP.NET -> PHP изключения
Създайте нова тема Напишете отговор 
Автор Съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 02/02/2018 10:27 pm     PHP изключения Отговорете с цитат


Интересувам се от проблеми, като този:
PHP code:

echo (int) ((0.1 + 0.7) * 10);


Има ли някъде описани такъв тип "странни" факти за PHP?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 151
Bonus: 301
Мнения: 1405
Мнение 02/02/2018 10:35 pm     Re: PHP изключения Отговорете с цитат


dakata__92 написа:
Интересувам се от проблеми, като този:
PHP code:

echo (int) ((0.1 + 0.7) * 10);


Има ли някъде описани такъв тип "странни" факти за PHP?

Това не е странен факт за PHP, а и в много други езици за програмиране. Например в JavaScript работи по същия начин:

Javascript code:
parseInt((0.1 + 0.7) * 10)


И в питон също: https://www.ideone.com/YY7EX4

Цитат:
print int((0.1 + 0.7) * 10)


И в кои ли още не.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
dakata__92
Активен
Активен

Регистриран на: 02/08/2011 9:24 pm

Support: 119
Bonus: 231
Мнения: 3065
Мнение 02/02/2018 10:46 pm      Отговорете с цитат


Именно. Има ли някъде информация на Български език по темата? Търся си литература по възможност на майчиният ни език. Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
djman
Активен
Активен

Регистриран на: 12/09/2009 10:07 am

Support: 105
Bonus: 200
Мнения: 2775
Мнение 03/02/2018 12:28 am      Отговорете с цитат


http://floating-point-gui.de/
http://floating-point-gui.de/basic/

https://stackoverflow.com/questions/2100490/floating-point-inaccuracy-examples

http://www.tyanev.com/home.php?s=271&lang=bg&mid=18&mod=1&b=12

Надявам се че те насочих поне малко Smile

Prelude> 0.1+0.2
0.30000000000000004
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
novakabg
Турист
Турист

Регистриран на: 13/05/2016 2:29 pm

Support: 5
Bonus: 10
Мнения: 286
Мнение 09/02/2018 6:11 pm      Отговорете с цитат


Не съм сигурен дали ще ти помогне това за обеснение все пак но ето няколко малки знания Smile

Ако низът започва с "0x", радиусът е 16 (шестнадесетичен)
Ако низът започва с "0", радиусът е 8 (осмичен).
Тази функция е отхвърлена
Ако низът започва с друга стойност, радиусът е 10 (десетично)


Типично е, че прости десетични фракции като 0,1 или 0,7 не могат да бъдат преобразувани в техните вътрешни двоични контрагенти без малка загуба на точност. Question

Ето малко повече Smile

http://www.zendexam.com/question/19/consider-the-following-php-scriptwhat-will-be-the-output-of-the-php-script/
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 52
Bonus: 104
Мнения: 675
Мнение 10/02/2018 4:38 pm     Re: PHP изключения Отговорете с цитат


dakata__92 написа:
Интересувам се от проблеми, като този:
PHP code:

echo (int) ((0.1 + 0.7) * 10);


Има ли някъде описани такъв тип "странни" факти за PHP?


А защо въобще го кастваш? С (int) каст правиш все едно floor(..). Вместо това, каствай до (real), за да получиш реалната стойност. Или въобще не го каствай.
Цялата работа идва от това, че числата с плаваща запетая не се преобразуват напълно точно в двоично число. Де факто от 0.1+0.7 получаваш 0.7(9) (9 в период) и като го кастнеш му взимаш само основата.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети