Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2011, 21:10   #1
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
Вопрос Обьясните мне не опытному

Почему в этом выражении выводит 7 а не 8
Код:
<?php
print (int)((0.1 + 0.7) * 10);
 ?>
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 08.08.2011, 21:25   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Кажется, я когда-то уже задавала подобный вопрос, но только по JavaScript. По какой-то неведомой причине 0,1+0,7 = 0,79999999... Как-то так.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 08.08.2011, 21:30   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Тут какая-то затыка с приведением типов:
PHP код:
$test = ((0.1 0.7) * 10);
var_dump($test);// float 8
$test2 intval($test);
var_dump($test2);// int 7 
Получается, что после операции с участием дробного числа - результат полюбому float.

Без (int) выводит корректно 8.
Andkorol вне форума Ответить с цитированием
Старый 08.08.2011, 21:42   #4
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Я так понял что это связано с разрядностью только каким образом?
Самый перспективный framework Yii (c)
TranceSmile вне форума Ответить с цитированием
Старый 08.08.2011, 21:49   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

по стандарту IEEE 754, который используется в архитектуре x86 (а, следовательно, и в реализации многих яп), например, следующие числа в бинарном виде неотличимы:

0.09999999999999999
0.10000000000000000
0.10000000000000001

и записываются одинаковой последовательностью байт: 9A 99 99 99 99 99 B9 3F

Та же истороия и с 0.7, числа

0.69999999999999999;
0.70000000000000000;
0.70000000000000001;

в бинарном виде неразличимы: 66 66 66 66 66 66 E6 3F

Однозначно (без потери точности) можно представить только числа вида 0.5 (= 1/2), 0.25 (= 1/4), 0.125 (= 1/8) и cуммы их, например 0.5625 ( = 1/2 + 1/16 ), т.е. те числа, которые представимы в виде конечной суммы обратных степеней двойки.

Инфы по этой теме вагон, стандарт 1985 года рождения. Вот, например, ссылочка, листайте там вниз до заголовка Comparing using integers.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 08.08.2011 в 22:04.
veniside вне форума Ответить с цитированием
Старый 08.08.2011, 22:10   #6
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А вот неплохая статья по этой теме тоже: http://yur.ru/science/computer/IEEE754.htm
motorway вне форума Ответить с цитированием
Старый 08.08.2011, 22:38   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

motorway, боже, где вы откопали эту муть? Смесь правды, полуправды и откровенного бреда, с целью запугать домохозяек страшными словами.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.08.2011, 22:44   #8
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Это креативный ученый, между прочем. Почитайте статьи по гравитации, интересно. Просто некоторые люди подозрительно относятся сперва к таким вещам
motorway вне форума Ответить с цитированием
Старый 08.08.2011, 22:58   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Про креативность я не и спорю, её там с избытком )

Вот только полезной информации там максимум 1%. При этом видно, что человек вроде как в теме, но по каким-то своим причинам он не пытается пояснить суть явлений, а предпочитает манипулировать воображением читателей, стимулируя его эффектными примерами.

Вот честно, поможет ли статься этого креативного учёного разобраться с вопросом ТС, как вы считаете? ) Ладно, это уже злостный оффтопик.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 08.08.2011, 23:02   #10
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Там хотя бы пояснено, откуда берется что. Непредставимость некоторых чисел и т.п.
motorway вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обьясните! Andrey770 Паскаль, Turbo Pascal, PascalABC.NET 2 14.05.2011 13:07
УВАЖАЕМЫЕ ПРОГРАММИСТЫ ОБЬЯСНИТЕ МНЕ ПОЖАЛУЙСТА ДИЛЕТАНТУ . дмитрий kjuby Свободное общение 1 13.07.2009 09:43
Ребята!!!Помогите!!!Мне..мне край!!! Генерал_Касетр Помощь студентам 0 15.06.2009 16:48
[B]Народ! Проверки мне верно или не верно? мне надо завтра сдавать[/B] Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 6 04.06.2008 14:34