Главная      Эл. книги      Для программиста      Софт      Галерея      Ссылки      О сайте
    

Сегодня:


При полном или частичном использовании материалов сайта ссылка на источник обязательна!

Copyright © Matyushchenko A., 2008. All rights reserved.


Rambler's Top100
VBScript и JavaScript


Математические возможности JavaScript

JavaScript имеет довольно обширную и гибкую возможность работы с математическими функциями. Работа с "математикой" заложена в объекте Math. В таблице ниже приведены основные методы объекта Math:

МетодОписание
absАбсолютное значение
sqrtВычисление квадратного корня
sin, cos, tanТригонометрические вычисления (значение аргументов задается в радианах!)
asin, acos, atanОбратные тригонометрические функции
expВычисление экспоненты
logВычисление натурального логарифмы
ceilНаименьшее целое, большее или равное значению аргумента
floorНаибольшее целое, большее или равное значению аргумента
min, maxНаибольшее или наименьшее значение двух аргументов
roundОкругление аргумента до ближайшего целого
randomГенератор псевдослучайных чисел
PIВсем известное число Pi (функция возвращает довольно точное значение - 3.141592653589793)
powПозательная функция ( pow(x,y)=xy )

Синтаксис записи математических функций таков: Math.[метод/свойство], т.е. необходимо явное обращение.
Незабывайте, что JavaScript восприимчив к регистру и поэтому, к примеру, запись t=Math.Round(t0) - вызовет ошибку! Рассмотрим нескольно примеров практического применения "математики" в JavaScript.
При работе с тригонометрическими функциями необходимо помнить, что значения аргументов задаются не в грудусах, а в радианах. Формула перевода из градусов радианы следующая: (Math.PI*a)/180, где: а - мера угла в градусах.
Math.abs(-4,725) вернет значение 4,725
Math.sqrt(-4,725) вернет значение NaN - ошибка, нельзя извлечь кв. корень из отрицательного числа! Будьте внимательны.
Math.sin((Math.PI*30)/180) - 30 градусов синуса равно 0.49999999999999994
Math.exp(4) - пример работы с экспонентой вернет значение 54.598150033144236, подставив единицу мы получим значение самой экспоненты.
Math.ceil(78,999) вернет значение 78
Math.max(78,99) вернет значение 99
Обратите внимание, что в трех следующих случаях функция вернет одинаковый результат, что показывает некорректную работу округления аргумента: Math.round(7,90147), Math.round(7,0014), Math.round(7,45048) - 7!
Math.pow(7,9) вернет значение 40353607, применение нецелых значений аргументов возвращает ошибку, помните об этом.
Math.random() вернет псевдослучайное число в диапазоне (0,1), (например, 0.31575492405195776 ). Как Вы вероятно заметили, эта функция генерирует ПСЕВДОслучайные числа, т.е. на самом деле набор сгенерированных чисел таким образом не является случайным и вся последовательность подвержена некой зависимости - можно сказать, что все числа генерируются на основе некой функции. Существует много различных способов получить действительно случайные числа с при помощи данного генератора, но эти опреции порой очень сложны и мы ограничимся только рассмотрением нескольких наиболее простых способов получения случайных чисел.
Начнем с того, что значит "получить случайное число"? Не используя специальных терминов и сложных определений ответ на этот вопрос можно сформулировать так: это значит, что имея набор неких чисел и производя их вывод, стоит ожидать появления оредедного числа с равной долей вероятности. Простой пример, пусть мы имеем два числа 0 и 1 - (0,1), какое количество раз выберет генератор случайных чисел (ГСЧ) то или иное число, например, после 10 подходов? Генератор действительно случайных чисел должен 5 раз выбрать 0 и 5 раз выбрать 1. Попробуйте провести этот эксперимент на практике - при использовании ГСЧ, в таком виде каком он представлен, этот пример не подтвердится. Приведем пример такого простейшего эспреримента на JavaScript:

for (var d=1; d<=10; d++) {
z=0;
x=0;
for (var i=1; i<=100; i++)
{
t=Math.random();
t=t*10;
t=Math.round(t);
if (t<=4) { z=z+1};
if (t>4) { x=x+1};
};
document.write(z);
document.write("_");
document.write(x);
document.write(">br<");
};

В данном примере 10 раз повторяется цикл подсчета генерации случайных чисел: если исходное число помноженное на 10 больше 4 (лежит в инвтервале от 0 до 4), то увеличивается на единицу один счетчик, иначе - другой; таким образом мы можем наблюдать фактически выбор между 0 и 1. Запущенный скрипт на моем ПК вывел такой результат:

40_60
50_50     (!)
43_57
39_61
45_55
38_62
47_53
44_56
47_53
43_57

Как видим теория подтверждает практику: применяемый в JavaScript ГСЧ - выдает ПСЕВДОслучайные числа, что и требовалось доказать. Заметьте, это все-лишь пример показывающий наиболее понятным образом проблему ГСЧ, и не является каким-либо научным или высокопрофессиональным объяснением сложившейся ситуации.
Попробуем решить проблему ГСЧ и попытаемся получить настоящие случайные числа используя ГСЧ.

Пример 1:
mas=new Array();
for (var d=0; d<=9; d++) {
i=Math.random();
i=i*9;
i=Math.round(i);
mas[d]=i;
};

for (var j=9; j>=0; j--)
{
i=Math.random(j);
i=i*9;
R=Math.round(j)*(j-1);
S = mas[R];
mas[R] = mas[j];
mas[j] = S;
document.write(">br<");
document.write(mas[j]);
};


Пример 2:
mas=new Array();
for (var d=0; d<=9; d++) {
i=Math.random();
i=i*9;
i=Math.round(i);
if (d>1)
if (mas[d]=mas[d-1]) {
i=Math.random();
i=i*9;
i=Math.round(i);
}
mas[d]=i;
document.write("
");
document.write(mas[d]);
};


На самом деле эти "трюки" ничего не решают, и призваны только "прервать" функциональный ряд с которым ПК генерирует числа. Запомните: в компьютерах нет случайного числа, и быть не может - поскольку компьютер - это машина живущая по конкретным алгоритмам, а алгоритм - это некая строго заданная последовательность, вкорне отрицающая всякую случайность.

Теперь покажем как можно более кратко работать с Math при записи кода. Допустим нам необходимо подряд вычислить несколько выражений, это можно (и нужно, согласно хорошему стилю программирования) делать так:

With(Math) {
  a=cos(1.7);
  l=1.75*PI*4*a;
  a=round(l);
}




01.07.2008

Автор - Matyushchenko A.
Сайт - www.ENTERcode.narod.ru

Сайт создан в системе uCoz