Elettracompany.com

Компьютерный справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Javascript возвести в степень

Предложение от 8host.com

Арифметические операторы в JavaScript

Математические операции являются одними из самых базовых и универсальных функций любого языка программирования. В JavaScript числа часто используются в общих задачах, таких как определение размеров окна браузера, вычисление окончательной цены денежной транзакции или расстояния между элементами в документе сайта.

Чтобы быть хорошим разработчиком, иметь высокие навыки в математике не обязательно, однако для этого важно знать, какие типы операций доступны в JavaScript и как использовать их для выполнения практических задач.

В отличие от других языков программирования, JavaScript имеет только один числовой тип данных; он не разделяет целые числа и числа с плавающей точкой.

Это руководство расскажет об арифметических операторах, операторах присваивания и порядке операций с числовыми данными JavaScript.

Арифметические операторы

Арифметические операторы – это символы, которые определяют математические операции и возвращают результат. К примеру, в 3 + 7 = 10 символ + определяет синтаксис операции сложения.

Многие операторы JavaScript знакомы вам из базовой математики, но есть также и несколько дополнительных операторов.

Все арифметические операторы JavaScript представлены в следующей таблице.

Сложение и вычитание

Операторы сложения и вычитания доступны в JavaScript и могут использоваться для нахождения суммы и разности числовых значений. JavaScript имеет встроенный калькулятор, а математические операции могут выполняться непосредственно в консоли.

Знак плюса позволяет складывать числа, например:

Помимо операций с простыми числами JavaScript позволяет присваивать числа переменным и выполнять с ними вычисления. Для примера можно присвоить числовые значения переменным x и y, а результат поместить в z.

// Assign values to x and y
let x = 10;
let y = 20;
// Add x and y and assign the sum to z
let z = x + y;
console.log(z);
30

Символ минус позволяет вычитать числа или выполнять операции с переменными:

// Assign values to x and y
let x = 10;
let y = 20;
// Subtract x from y and assign the difference to z
let z = y — x;
console.log(z);
10

Также можно складывать и вычитать отрицательные числа и числа с плавающей запятой.

// Assign values to x and y
let x = -5.2;
let y = 2.5;
// Subtract y from x and assign the difference to z
let z = x — y;
console.log(z);
-7.7

В JavaScript есть одна интересная особенность, которую следует учитывать и знать, — это результат сложения числа и строки. Мы знаем, что 1 + 1 должно равняться 2, но это уравнение выдаст неожиданный результат.

let x = 1 + «1»;
console.log(x);
typeof x;
11
‘string’

Вместо сложения чисел JavaScript преобразует все выражение в строки и объединяет их. Важно быть осторожным с динамической типизацией JavaScript, поскольку она может иметь нежелательные результаты.

Сложение и вычитание в JavaScript часто используются для прокрутки панели навигации.

function scrollToId() <
const navHeight = 60;
window.scrollTo(0, window.pageYOffset — navHeight);
>
window.addEventListener(‘hashchange’, scrollToId);

В этом случае панель будет прокручиваться на 60 пикселей от id.

Умножение и деление

Операторы умножения и деления JavaScript используются для поиска производного и частного числовых значений.

Звездочка является оператором умножения.

// Assign values to x and y
let x = 20;
let y = 5;
// Multiply x by y to get the product
let z = x * y;
console.log(z);
100

Умножение можно использовать для расчета цены товара после введения налога с продаж.

const price = 26.5; // Price of item before tax
const taxRate = 0.082; // 8.2% tax rate
// Calculate total after tax to two decimal places
let totalPrice = price + (price * taxRate);
totalPrice.toFixed(2);
console.log(«Total:», totalPrice);
Total: 28.67

Слеш – оператор деления.

// Assign values to x and y
let x = 20;
let y = 5;
// Divide y into x to get the quotient
let z = x / y;
console.log(z);
4

Деление особенно полезно при расчете времени, например, при вычислении количества часов или процента правильных ответов в тесте.

Модуль числа

Модуль – еще один арифметический оператор, менее популярный, чем предыдущие. Представлен символом %. Он возвращает остаток при делении первого числа на второе.

К примеру, мы знаем, что 9 делится на 3 без остатка:

Модуль числа позволяет определить четное или нечетное число, например:

// Initialize function to test if a number is even
const isEven = x => <
// If the remainder after dividing by two is 0, return true
if (x % 2 === 0) <
return true;
>
// If the number is odd, return false
return false;
>
// Test the number
isEven(12);
true

В этом примере 12 делится на 2, следовательно, это четное число.

В программировании модуль числа часто используется в сочетании с условными операторами.

Возведение в степень

Возведение в степень – один из самых новых операторов JavaScript. Синтаксис возведения в степень – две звездочки подряд (**).

К примеру, 10 в пятой степени (10^5) записывается так:

Операция 10 ** 5 имеет тот же результат, что 10 * 10, повторенная 5 раз.

10 * 10 * 10 * 10 * 10;

Также эту операцию можно записать с помощью метода Math.pow().

Math.pow(10, 5);
100000

Использование оператора возведения в степень – быстрый способ определить степень заданного числа, но, как обычно, при выборе между методом и оператором важно быть последовательными и писать код в одном стиле.

Инкремент и декремент

Операторы инкремента и декремента увеличивают или уменьшают числовое значение переменной на единицу. Они представлены двумя плюсами (++) или двумя минусами (—) и часто используются в циклах.

Читать еще:  Java development kit mac

Обратите внимание: операторы инкремента и декремента могут использоваться только с переменными. Попытка использовать их с простыми числами приведет к ошибке.

7++
Uncaught ReferenceError: Invalid left-hand side expression in postfix operation

Операторы инкремента и декремента можно классифицировать как префиксные и постфиксные операции, в зависимости от того, где по отношению к переменной размещен оператор.

Префиксный инкремент записывается как ++х.

// Set a variable
let x = 7;
// Use the prefix increment operation
let prefix = ++x;
console.log(prefix);
8

Значение х увеличилось на 1. Постфиксный инкремент пишется как у++.

// Set a variable
let y = 7;
// Use the prefix increment operation
let postfix = y++;
console.log(postfix);
7

Постфиксная операция не увеличила значение. Это значение не будет увеличиваться до тех пор, пока выражение не будет оценено. Для этого нужно запустить операцию дважды:

Чаще всего эти операторы встречаются в циклах. В данном цикле for оператор запускается 10 раз, начиная с 0.

// Run a loop ten times
for (let i = 0; i

В этом примере итерация цикла выполняется с помощью оператора инкремента.

Проще говоря, х++ можно воспринимать как сокращение от х = х + 1, а х—как сокращение от х = х – 1.

Операторы присваивания

Одним из наиболее часто используемых операторов является оператор присваивания, который уже встречался в этом мануале. Он представлен знаком равенства (=). Символ = используется для присвоения значения справа переменной слева.

// Assign 27 to age variable
let age = 27;

Помимо стандартного оператора присваивания JavaScript имеет составные операторы присваивания, которые комбинируют арифметический оператор с оператором =.

К примеру, оператор добавления начнет с исходного значения и добавит к нему новое значение.

// Assign 27 to age variable
let age = 27;
age += 3;
console.log(age);
30

По сути, age += 3 – то же самое, что и age = age + 3.

Все арифметические операторы можно объединять с оператором присваивания. Ниже приведена справочная таблица операторов присваивания в JavaScript.

Самое быстрое модульное возведение в степень в JavaScript

моя задача-вычислить (g^x) mod p быстро в JavaScript, где ^ — это возведение в степень, mod — операция по модулю. Все входные данные являются неотрицательными целыми числами, x около 256 бит, и p является простым числом 2048 бит, и g может иметь до 2048 бит.

большинство программ, которые я нашел, которые могут сделать это в JavaScript, похоже, используют библиотеку JavaScript BigInt (http://www.leemon.com/crypto/BigInt.html). Делать сингл возведение в степень такого размера с помощью этой библиотеки занимает около 9 секунд в моем медленном браузере (Firefox 3.0 с SpiderMonkey). Я ищу решение, которое по крайней мере в 10 раз быстрее. Очевидная идея использования квадрата и умножения (возведение в квадрат,http://en.wikipedia.org/wiki/Exponentiation_by_squaring) слишком медленно для 2048-битных чисел: для этого нужно до 4096 умножений.

обновление браузера-не вариант. Использование другого языка программирования это не вариант. Отправка номеров в веб-службу не является опцией.

реализована ли более быстрая альтернатива?

Update: выполнив некоторые дополнительные приготовления (т. е. предварительно вычисляя несколько сотен полномочий), как рекомендовано в статье http://www.ccrwest.org/gordon/fast.pdf упомянутый в ответе outis ниже, можно сделать 2048-битную модульную экспоненциальность, используя не более 354 модульных умножения. (Традиционный квадрат и умножить метод намного медленнее: он использует максимальные 4096 модульных умножений.) Это ускоряет модульную экспоненциальность в 6 раз в Firefox 3.0 и в 4 раза в Google Chrome. Причина, по которой мы не получаем полного ускорения 4096/354, заключается в том, что модульный алгоритм экспоненции Бигинта уже быстрее, чем квадрат и умножение, потому что он использует сокращение Монтгомери (http://en.wikipedia.org/wiki/Montgomery_reduction).

обновление: начиная от Код BigInt, кажется, стоит сделать два уровня ручного оптимизированного (и встроенного) умножения Карацубы (http://en.wikipedia.org/wiki/Karatsuba_algorithm), и только затем вернитесь к базовому-32768 o(n^2) умножению, реализованному в BigInt. Это ускоряет умножение в 2,25 раза для 2048-битных целых чисел. К сожалению, операция по модулю не становится быстрее.

Update: использование измененного сокращения Барретта, определенного в http://www.lirmm.fr/arith18/papers/hasenplaugh-FastModularReduction.pdf и умножение Карацубы и вычислительные мощности (как определено в http://www.ccrwest.org/gordon/fast.pdf), я могу получить время, необходимое для одного умножения с 73 секунд до 12,3 секунд в Firefox 3.0. Кажется, это лучшее, что я могу сделать, но все еще слишком медленно.

Update: интерпретатор ActionScript 2 (AS2) в Flash Player не стоит использовать, потому что он кажется медленнее, чем интерпретатор JavaScript в Firefox 3.0: для Flash Player 9 он кажется в 4,2 раза медленнее, а для Flash Player 10-в 2,35 раза медленнее. Кто-нибудь знает разницу в скорости между ActionScript2 и ActionScript3 (AS3) в число chrunching?

Update: интерпретатор ActionScript 3 (AS3) в Flash Player 9 не стоит использовать, потому что он имеет примерно такую же скорость, как JavaScript int Firefox 3.0.

Обновление: Интерпретатор ActionScript 3 (AS3) в Flash Player 10 может быть до 6,5 раз быстрее, чем интерпретатор JavaScript в Firefox 3.0, Если int вместо Number и Vector. вместо Array . По крайней мере, это было в 2,41 раза быстрее для 2048-битного большого целочисленного умножения. Поэтому, возможно, стоит сделать модульную экспоненцию в AS3, выполнив ее в Flash Player 10, если она доступна. Обратите внимание, что это все еще медленнее, чем V8, интерпретатор JavaScript Google Chrome. Видеть http://ptspts.blogspot.com/2009/10/javascript-and-actionscript-performance.html Для сравнения скорости различных реализаций языка программирования и JavaScript.

Читать еще:  Ошибка d3d9 device как исправить

Update: существует очень быстрое решение Java, которое можно вызвать из JavaScript браузера, если установлен плагин Java. Следующее решение примерно в 310 раз быстрее, чем чистая реализация JavaScript с использованием BigInt.

может ли кто-нибудь перевести этот код на Silverlight (C#)?

Математические функции и операторы в JavaScript

Сборка арифметических операторов и методов чисел в JavaScript. Всё что связано с математикой в JavaScript с примерами функций, собрано вместе на одной странице

Я часто пишу на JavaScript и в последнее время я часто именно на нём пишу всякие штуки для сайтов.

А больше всего я пишу на JavaScript разные онлайн калькуляторы для сайтов.

Поэтому для себя пишу шпаргалочку, где буду собирать все функции и операторы, которые участвуют в арифметических расчётах.

Арифметические функции и операторы в JavaScript

+ — сложение; — — вычитание; / — деление; * — умножение; % — остаток от деления.

parseInt — читает из строки целое число

parseFloat — читает из строки дроби

# Проверка на число

Проверку типа данных на число можно сделать при помощи функции isNaN() , которая определяет является ли литерал или переменная нечисловым значением:

поэтому чтобы проверить значение на то является ли оно числом, перед isNaN ставят восклицательный знак ! , котоый является логическим оператором НЕ (неравно, неправда):

Ещё один способ определить является ли значение числом — это использовать оператор typeof , который возвращает строку указывающую тип операнда:

# Объект Math

Объект Math является встроенным объектом в язык JavaScript. Он хранит в своих свойствах и методах различные математические константы и функции. При этом объект Math не является функциональным объектом.

Math.ceil() — Округляет вверх

Math.floor() — Округляет вниз

Math.round() — Округляет до ближайшего целого

Math.trunc() — отрезает дробную часть и получается целое число. Например: Math.trunc(14,318) вернёт результат 14 . Метод не округляет, а просто откидывает дробную часть.

.toFixed(2) — округляет число до 2 знаков. Цифра указывает сколько знаков оставлять после запятой.

Math.max() — возвращает самое большое число. Пример: Math.max(2, 73, 14, 47) вернёт 73.

Math.min() — возвращает наименьшее из чисел.

# Работа со степенями

Math.sqrt() — Корень квадратный

Math.cbrt() — Корень кубический

Math.pow(num, st) — Возвести число в степень.

  • num — число которое возвести в степень,
  • st — степень в которую возвести число.

# Операторы сравнения

>= — больше или равно; — меньше или равно

== — равно; != — не равно

Тригонометрия

Math.sin(x) — возвращает числовое значение от -1 до 1, которое представляет синус переданного (в радианах) угла

Math.cos() — возвращает косинус числа

Math.tan() — возвращает тангенс числа

Math.acos() — возвращает арккосинус числа

Math.asin() — возвращает арксинус числа

Math.atan() — возвращает арктангенс числа в радианах

Math.atan2() — возвращает арктангенс от частного своих аргументов

# Рандомное число (случайное число)

Math.random() — Возвращает случайное число в диапазоне от 0 до 1.

Функция для генерации целых случайных чисел:

Функция вовращает случайное целое число между min (включительно) и max (не включая max)

Быстрый модульного возведения в степень JavaScript

Моя задача состоит в том, чтобы быстро вычислить (g^x) mod p в JavaScript, где ^ -возведение в степень, mod -операция по модулю. Все входные данные являются неотрицательными целыми числами, x имеет около 256 бит, а p -простое число из 2048 бит, а g может иметь до 2048 бит.

Большинство программ, которые я нашел, которые могут сделать это в JavaScript, похоже, используют библиотеку JavaScript BigInt (http://www.leemon.com/crypto/BigInt.html). Выполнение одного возведения в степень такого размера с помощью этой библиотеки занимает около 9 секунд в моем медленном браузере (Firefox 3.0 с SpiderMonkey). Я ищу решение, которое будет как минимум в 10 раз быстрее. Очевидная идея использования square-and-multiply (возведение в степень путем возведения в квадрат, http://en.wikipedia.org/wiki/Exponentiation_by_squaring) слишком медленна для 2048-битных чисел: для этого требуется до 4096 умножений.

Обновление браузера-это не вариант. Использование другого языка программирования-это не вариант. Отправка номеров в веб-службу не является опцией.

Существует ли более быстрая альтернатива реализации?

Обновление: сделав некоторые дополнительные приготовления (т. е. предварительно вычисляя несколько сотен степеней), как рекомендовано в статье http://www.ccrwest.org/gordon/fast.pdf , упомянутой в ответе outis ниже, можно сделать 2048-битную модульную экспоненцию, используя только самое большее 354 модульных умножения. (Традиционный метод square-and-multiply гораздо медленнее: он использует максимум 4096 модульных умножений.) Делаю так ускоряет модульного возведения в степень на коэффициент 6 в Firefox 3.0, и с коэффициентом 4 в Google хром. Причина, по которой мы не получаем полного ускорения 4096/354, заключается в том, что модульный алгоритм экспоненции BigInt уже быстрее, чем square-and-multiply, потому что он использует сокращение Монтгомери ( http://en.wikipedia.org/wiki/Montgomery_reduction ).

Обновление: начиная с кода BigInt, кажется, стоит сделать два уровня ручного оптимизированного (и встроенного) умножения Карацубы (http://en.wikipedia.org/wiki/Karatsuba_algorithm), и только затем вернуться к базовому-32768 O(n^2) умножения, реализованного в BigInt. Это ускоряет умножение на коэффициент 2.25 для 2048-битных целых чисел. К сожалению, операция по модулю не становится быстрее.

Обновление: используя модифицированное сокращение Барретта, определенное в http://www.lirmm.fr/arith18/papers/hasenplaugh-FastModularReduction.pdf , и умножение Карацубы и предварительные вычислительные мощности (как определено в http://www.ccrwest.org/gordon/fast.pdf ), я могу сократить время, необходимое для одного умножения, с 73 секунд до 12.3 секунд в Firefox 3.0. Это, кажется, лучшее, что я могу сделать, но все еще слишком медленно.

Читать еще:  Java xmlgregoriancalendar to date

Обновление: интерпретатор ActionScript 2 (AS2) в проигрывателе Flash не стоит использовать, потому что он кажется медленнее, чем интерпретатор JavaScript в Firefox 3.0: для игрока Flash 9 он кажется в 4.2 раза медленнее, а для игрока Flash 10-в 2.35 раза медленнее. Кто-нибудь знает разницу в скорости между ActionScript2 и ActionScript3 (AS3) для хруста чисел?

Обновление: интерпретатор ActionScript 3 (AS3) в Flash Player 9 не стоит использовать, потому что он имеет примерно такую же скорость, как и JavaScript int Firefox 3.0.

Обновление: интерпретатор ActionScript 3 (AS3) в Flash Player 10 может быть до 6.5 раз быстрее , чем интерпретатор JavaScript в Firefox 3.0, если вместо Number используется int , а вместо Array — Vector. . По крайней мере, это было в 2.41 раз быстрее для 2048-битного умножения больших целых чисел. Так что может быть стоит делать модульного возведения в степень в АС3, он выполняется в Flash плеер 10 при наличии. Обратите внимание, что это все еще медленнее, чем V8, интерпретатор JavaScript Google Chrome. См. http://ptspts.blogspot.com/2009/10/javascript-and-actionscript-performance.html для сравнения скорости различных реализаций языка программирования и JavaScript.

Обновление: существует очень быстрое решение Java, которое можно вызвать из браузера JavaScript, если установлен плагин Java. Следующее решение примерно в 310 раз быстрее, чем чистая реализация JavaScript с использованием BigInt.

Может ли кто-нибудь перевести этот код на Silverlight (C#)?

Быстрое модульное возведение в степень JavaScript

Моя задача — быстро вычислить (g^x) mod p в JavaScript, где ^ — возведение в степень, mod — операция по модулю. Все входы представляют собой неотрицательные целые числа, x имеет около 256 бит, а p — простое число из 2048 бит, а g может иметь до 2048 бит.

Большая часть программного обеспечения, которое я нашел, которое может сделать это в JavaScript, похоже, использует библиотеку JavaScript BigInt (http://www.leemon.com/crypto/BigInt.html). Выполнение одного экспоненциального размера такого размера с этой библиотекой занимает около 9 секунд в моем медленном браузере (Firefox 3.0 с SpiderMonkey). Я ищу решение, которое по крайней мере в 10 раз быстрее. Очевидная идея использования квадратичного умножения (возведение в степень по квадрату, http://en.wikipedia.org/wiki/Exponentiation_by_squaring) слишком медленна для 2048-битных чисел: она нуждается в до 4096 умножений.

Обновление браузера не является вариантом. Использование другого языка программирования не является вариантом. Отправка номеров в веб-службу не является вариантом.

Есть ли более быстрая альтернатива?

Обновление: сделав некоторые дополнительные приготовления (т.е. предварительно вычислив несколько сотен полномочий), как рекомендовано в статье http://www.ccrwest.org/gordon/fast.pdf, упомянутой в ответе outis ниже, можно сделать до 2048-битного модульного возведения в степень, используя только не более 354 модульных умножений. (Традиционный метод квадратичного умножения намного медленнее: он использует максимум 4096 модульных умножений.) Это ускоряет модульное возведение в 6 раз в Firefox 3.0 и в 4 раза в Google Chrome. Причина, по которой мы не получаем полного ускорения 4096/354, заключается в том, что алгоритм модульной экспоненты BigInt уже быстрее, чем квадратный и многократный, поскольку он использует сокращение Montgomery ( ).

Обновление: начиная с кода BigInt, кажется целесообразным сделать два уровня ручного оптимизированного (и встроенного) умножения Карацубы (http://en.wikipedia.org/wiki/Karatsuba_algorithm), и только затем вернитесь к умножению базы-32768 O (n ^ 2), реализованному в BigInt. Это ускоряет умножения в 2,25 раза для 2048-битных целых чисел. К сожалению, операция modulo не ускоряется.

Обновление: с использованием модифицированной редукции Барретта, определенной в http://www.lirmm.fr/arith18/papers/hasenplaugh-FastModularReduction.pdf и способности умножения и предвычисления Карацубы (как определено в http://www.ccrwest.org/gordon/fast.pdf), я могу сократить время, необходимое для одного умножения с 73 секунд до 12.3 секунд в Firefox 3.0. Кажется, это лучшее, что я могу сделать, но он все еще слишком медленный.

Обновление: интерпретатор ActionScript 2 (AS2) в Flash Player не стоит использовать, потому что он, кажется, медленнее, чем интерпретатор JavaScript в Firefox 3.0: для Flash Player 9 он, по-видимому, в 4,2 раза медленнее, и для Flash Player 10, похоже, он в 2,35 раза медленнее. Кто-нибудь знает разницу в скорости между ActionScript2 и ActionScript3 (AS3) для chrunching?

Обновление: интерпретатор ActionScript 3 (AS3) в Flash Player 9 не стоит использовать, поскольку он имеет примерно такую ​​же скорость, что и JavaScript int Firefox 3.0.

Обновление: интерпретатор ActionScript 3 (AS3) в Flash Player 10 может быть в 6,5 раз быстрее, чем интерпретатор JavaScript в Firefox 3.0, если вместо Number используется int , а Vector. используется вместо Array . По крайней мере, это было в 2,41 раза быстрее для 2048-битного большого целочисленного умножения. Поэтому, возможно, стоит сделать модульное возведение в степень в AS3, выполнив его в Flash Player 10, если он доступен. Обратите внимание, что это все еще медленнее, чем V8, интерпретатор JavaScript в Google Chrome. См. http://ptspts.blogspot.com/2009/10/javascript-and-actionscript-performance.html для сравнения скорости различных языков программирования и реализаций JavaScript.

Обновление. Существует очень быстрое Java-решение, которое можно вызывать из браузера JavaScript, если установлен плагин Java. Следующее решение примерно в 310 раз быстрее, чем чистая реализация JavaScript с помощью BigInt.

Можно ли перевести этот код на Silverlight (С#)?

Ссылка на основную публикацию
Adblock
detector