![]() |
|
||||||||||
|
|||||
|
[+4 06.05.14]
|
Делать было нечего, дело было вечером...
Зашел я как то на один англоязычный ресурс пройти тестирование по AS3 - стало интересно насколько я нуб нубистый. И вот пожалуйста навскидку вопрос *что не так в коде* : Мне вот интересно, скажите по честному , сколько из вас посмотрев данный код , подумав пару секунд - сразу сказали, что цикл не будет выполнен вообще? ( бесконечный ) . Каюсь - пока сам не проверил, не поверил, что это так. Да понятно - это все специфическая часть языка, но пипец такие вещи всегда помнить, хотя наверное это связано с тем, что number я редко использую в своих проектах, но все же было обидно ответить не верно на простейший код из 2х строк
__________________
Марк Tween |
|
|||||
|
listener
|
Подумав пару секунд, я засоменевался, что это вообще скомпилится.
Изюм не только в Number, но и в , (оператор запятая). |
|
|||||
|
Только вот так var c:Number = 0; var d:Boolean = true; while ( d ) { c += 0.1 ; if ( c >= 10 ) d = false; } 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. |
|
|||||
|
[+4 06.05.14]
|
С запятой, я просто сократил, это не суть. Сама суть была в number. alexcon314 А как сдеолать так, чтобы цикл был небесконечный - проблем нет. Я именно конкретизировал суть - что помнить, что при += 0.1 будут запредельные числа никогда не достигающие целого 10
__________________
Марк Tween |
|
|||||
|
[+4 06.05.14]
|
Я не против. Так и никто не ответил на мой вопрос : посмотрев код ( и не читая комменты ), вы все сразу поняли, что цикл не выполнится из за того, что Number так работает, или нет ?
__________________
Марк Tween |
|
|||||
|
Banned
|
Первое, на что обратил внимание это на символ , . Второе, что c может ровняться 10 а может и нет.
Добавлено через 4 минуты Тут варианта два: или В первом случае, конечно же все будет работать, но второй правильнее (если бы FPU работал честно), т.к. хороший тон сравнивать дробное с дробным. Хотя Flash Runtime все равно оптимизирует этот код и преобразует 10.0 в 4х байтный int, а жаль. Следовательно 10.0 имеет смысл только в Java, C++ и т.п. ![]() P.S. в C++ это 10.0f |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|