![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2007
Сообщений: 319
|
выдаёт такие значения при перезапуске:
1,1,0.5,0.01,0.01,0.01,1 (3.5299999999999994) 1,1,0.5,0.01,0.01,0.01,0.01 (2.539999999999999) 1,1,0.5,0.01,0.01,0.01,0.5 (3.0299999999999994) нестабильно както, я думаю всё дело в рандоме |
|
|||||
|
Не не, вы видимо не скопировали ту функцию toFixed
Дело в том, что в AS3 пониженная точность у double floating point значений, и часто при вычитании таких чисел, например результатом выдает 1.5299999993 и 4.13999995 соответственно. Эти проблемы точности простых вычислений много обсуждаются на stackOverflow, и там приняли использовать ту функцию округления. Рандом там просто находит индекс перераскладываемого числа) |
|
|||||
|
KumoKairo, работает медленнее перебора. Выдает неверный результат при входных данных [10, 11], 110, 11. Уходит в вечный цикл при входных данных [11, 10], 110, 11.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Весело у вас тут))
package { import flash.display.Sprite; import flash.events.Event; /** * ... * @author wolsh */ public class Main extends Sprite { private var _coinsCount:uint = 7; private var _nominals:Array = [0.01, 0.05, 0.1, 0.2, 0.5, 1, 2, 5, 10, 50, 100, 500, 1000]; private var _summ:Number = 125.15; private var _result:Array; public function Main():void { _nominals = _nominals.sort(16); while (_nominals[_nominals.length - 1] > _summ) _nominals.pop(); _result = new Array(_coinsCount); for (var i:uint = 0; i < _coinsCount; i++) { _result[i] = _nominals[0]; } count:for (var n:uint = 0; n < _coinsCount; n++) { nominal:for (var c:uint = 1; c < _nominals.length; c++) { _result[n] = _nominals[c]; if (summ(_result) < _summ) { continue nominal; } if (summ(_result) > _summ) { _result[n] = _nominals[c - 1]; continue count; } if (summ(_result) == _summ) { break count; } } } if(summ(_result) == _summ) trace("Получилось!", _result, "(", summ(_result), ")"); else trace("Близкий результат:", _result, "(", summ(_result), ")"); } private function summ(array:Array):Number { var result:Number = 0; for (var i:uint = 0; i < array.length; i++) { result += array[i]; } return Math.round(result * 100) / 100; } } }
__________________
Reality.getBounds(this); |
|
|||||
|
Modus ponens
|
Та это ж классика... из SICP, упражнение 2.19
Вы чего?Вот, собсно, с объяснениями и кодом. Если что не понятно, я перепишу на AS. http://wiki.drewhess.com/wiki/SICP_exercise_2.19
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:21. |
|
|
« Предыдущая тема | Следующая тема » |
|
|