Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flasher.ru > Флейм

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.04.2014, 16:15
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Вопрос Навскидку

Делать было нечего, дело было вечером...

Зашел я как то на один англоязычный ресурс пройти тестирование по AS3 - стало интересно насколько я нуб нубистый. И вот пожалуйста навскидку вопрос *что не так в коде* :

Код AS3:
var c:Number = 0;
var d:Boolean = true;
while ( d )  c += 0.1 , if ( c == 10 ) d = false;
Мне вот интересно, скажите по честному , сколько из вас посмотрев данный код , подумав пару секунд - сразу сказали, что цикл не будет выполнен вообще? ( бесконечный ) . Каюсь - пока сам не проверил, не поверил, что это так. Да понятно - это все специфическая часть языка, но пипец такие вещи всегда помнить, хотя наверное это связано с тем, что number я редко использую в своих проектах, но все же было обидно ответить не верно на простейший код из 2х строк
__________________
Марк Tween

Старый 28.04.2014, 16:49
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Код AS3:
var c:Number = 0;
var d:Boolean = true;
while ( d )  c += 0.1 , if ( c == 10 ) d = false;
Подумав пару секунд, я засоменевался, что это вообще скомпилится.
Изюм не только в Number, но и в , (оператор запятая).

Старый 28.04.2014, 16:51
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 3  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Мне кажется, должно скомпилиться
Только вот так
Код AS3:
var c:Number = 0;
var d:Boolean = true;
while ( d )
{
	c += 0.1 ; 
	if ( c >= 10 ) d = false;
}
Добавлено через 4 минуты
Код AS3:
var c:Number = 0;
var d:Boolean = true;
while ( d )
{
	c += 0.1 ; 
	if ( c >= 10 ) d = false;
	trace(c);
}
Код:
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
1.3
1.4000000000000001
1.5000000000000002
1.6000000000000003
1.7000000000000004
1.8000000000000005
1.9000000000000006
2.0000000000000004
2.1000000000000005
2.2000000000000006
2.3000000000000007
2.400000000000001
2.500000000000001
2.600000000000001
2.700000000000001
2.800000000000001
2.9000000000000012
3.0000000000000013
3.1000000000000014
3.2000000000000015
3.3000000000000016
3.4000000000000017
3.5000000000000018
3.600000000000002
3.700000000000002
3.800000000000002
3.900000000000002
4.000000000000002
4.100000000000001
4.200000000000001
4.300000000000001
4.4
4.5
4.6
4.699999999999999
4.799999999999999
4.899999999999999
4.999999999999998
5.099999999999998
5.1999999999999975
5.299999999999997
5.399999999999997
5.4999999999999964
5.599999999999996
5.699999999999996
5.799999999999995
5.899999999999995
5.999999999999995
6.099999999999994
6.199999999999994
6.299999999999994
6.399999999999993
6.499999999999993
6.5999999999999925
6.699999999999992
6.799999999999992
6.8999999999999915
6.999999999999991
7.099999999999991
7.19999999999999
7.29999999999999
7.39999999999999
7.499999999999989
7.599999999999989
7.699999999999989
7.799999999999988
7.899999999999988
7.999999999999988
8.099999999999987
8.199999999999987
8.299999999999986
8.399999999999986
8.499999999999986
8.599999999999985
8.699999999999985
8.799999999999985
8.899999999999984
8.999999999999984
9.099999999999984
9.199999999999983
9.299999999999983
9.399999999999983
9.499999999999982
9.599999999999982
9.699999999999982
9.799999999999981
9.89999999999998
9.99999999999998
10.09999999999998
__________________
There is no thing in this world that is not simple.

Старый 28.04.2014, 17:15
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Код AS3:
var c:Number = 0;
var d:Boolean = true;
while (  c += 0.1 , d ) if ( c >= 10 ) d = false; 
trace(c);

Старый 28.04.2014, 17:22
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
С запятой, я просто сократил, это не суть. Сама суть была в number. alexcon314 А как сдеолать так, чтобы цикл был небесконечный - проблем нет. Я именно конкретизировал суть - что помнить, что при += 0.1 будут запредельные числа никогда не достигающие целого 10
__________________
Марк Tween

Старый 28.04.2014, 17:30
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 6  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
что при += 0.1 будут запредельные числа никогда не достигающие целого 10
Это во многих языках бывает, as3 тут ни причем.

Старый 28.04.2014, 17:37
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Я не против. Так и никто не ответил на мой вопрос : посмотрев код ( и не читая комменты ), вы все сразу поняли, что цикл не выполнится из за того, что Number так работает, или нет ?
__________________
Марк Tween

Старый 28.04.2014, 17:46
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 8  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Первое, на что обратил внимание это на символ , . Второе, что c может ровняться 10 а может и нет.

Добавлено через 4 минуты
Тут варианта два:
Код AS3:
if ( int(c) == 10 )
или
Код AS3:
if ( c == 10.0 )
В первом случае, конечно же все будет работать, но второй правильнее (если бы FPU работал честно), т.к. хороший тон сравнивать дробное с дробным.
Хотя Flash Runtime все равно оптимизирует этот код и преобразует 10.0 в 4х байтный int, а жаль. Следовательно 10.0 имеет смысл только в Java, C++ и т.п.

P.S. в C++ это 10.0f

Старый 28.04.2014, 17:52
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 9  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Хорошее понимание языка это оторвать руки за такую конструкцию.
__________________
:)

Старый 28.04.2014, 18:21
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 10  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Aquahawk - к чему это ты? Это вопрос теста, там могло быть написано хоть *опа* - это не важно, вопрос на знание и внимательность, а не на качество исполнения
__________________
Марк Tween

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 04:26.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.