Сегодня:
При полном или частичном использовании материалов сайта ссылка на источник обязательна!
Copyright © Matyushchenko A., 2008. All rights reserved.
|
VBScript и JavaScript
Математические возможности JavaScript
JavaScript имеет довольно обширную и гибкую возможность работы с математическими функциями. Работа с "математикой" заложена в объекте Math. В таблице ниже приведены основные методы объекта Math:
Синтаксис записи математических функций таков: 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 |