Когда Вы преобразовываете.1 или 1/10 для базирования 2 (двоичный файл), Вы получаете повторяющийся шаблон после десятичной точки, точно так же, как попытка представить 1/3 в основе 10. Значение не точно, и поэтому Вы не можете сделать точной математики с ним с помощью нормальных методов с плавающей точкой.
Лучший способ ответить на такой вопрос - это попробовать. Настройте цикл, который насчитывает миллион итераций или что-то еще, и делайте это в обоих направлениях. Измерьте время обоих циклов и сравните результаты.
Ответ, вероятно, будет зависеть от того, какой браузер вы используете. Некоторые результаты будут отличаться от результатов других.
Обожаю, много оценок, но нет ответа: D
Просто сравните против нуля всегда является самым быстрым сравнением
Таким образом, (a == 0) на самом деле быстрее возвращает True, чем (a == 5)
Оно маленькое и незначительное, и при 100 миллионах строк в коллекции его можно измерить.
то есть в цикле вверх вы могли бы сказать where i <= array.length и увеличить i
в цикле вниз вы могли бы сказать where i> = 0 и вместо этого уменьшить i.
Сравнение выполняется быстрее . Не "направление" петли.
Как вы это делаете сейчас не быстрее (кроме того, что это бесконечный цикл, я полагаю, вы хотели сделать i -
.
Если вы хотите сделать это быстрее, сделайте:
for (i = 10; i--;) {
//super fast loop
}
конечно, вы бы не стали заметьте это в таком маленьком цикле. Причина в том, что это быстрее, потому что вы уменьшаете i, проверяя, что он «истина» (он оценивается как «ложь», когда достигает 0)
Этот парень сравнил множество циклов в javascript во многих браузерах. У него также есть набор тестов , так что вы можете запустить их самостоятельно.
Во всех случаях (если я не пропустил ни одного в моем чтении) самый быстрый цикл был:
var i = arr.length; //or 10
while(i--)
{
//...
}
Это можно объяснить тем, что JavaScript (и все языки) в конечном итоге превратились в коды операций для запуска на ЦП. У ЦП всегда есть одна инструкция для сравнения с нулем, что чертовски быстро.
Кроме того, если вы можете гарантировать, что count
всегда > = 0
, вы можете упростить его до :
for (var i = count; i--;)
{
// whatever
}
Во многих случаях это по сути не имеет ничего общего с тем фактом, что процессоры могут сравнивать с нулем быстрее, чем другие сравнения.
Это потому, что только несколько механизмов Javascript (те, что указаны в списке JIT) фактически генерируют код машинного языка.
Большинство механизмов Javascript создают внутреннее представление исходный код, который они затем интерпретируют (чтобы понять, на что это похоже, посмотрите внизу этой страницы на Firefox SpiderMonkey ). Обычно, если фрагмент кода выполняет практически то же самое, но приводит к более простому внутреннему представлению, он будет работать быстрее.
Имейте в виду, что с простыми задачами, такими как добавление / вычитание единицы из переменной,
Использование оператора приращения префикса несколько быстрее. С постфиксом компилятор должен сохранить предыдущее значение как результат выражения.
for (var i = 0; i < n; ++i) {
do_stuff();
}
Умный интерпретатор или компилятор увидит, что результат i ++ не используется, и не сохранит результат выражения, но не все движки js делать.