Выбрать главу

Приведу неполный список математических функций Visual Basic:

Кроме этого, имеются функции Sin, Cos, Tan (что означает тангенс), Atn (что означает арктангенс), Exp, Log и др.

Примеры:

Выражение (2+1)^2 при вычислении даст 9

Выражение 1+(2+8)^3 при вычислении даст 1001

Выражение 1+Abs(5–8) при вычислении даст 4

Выражение 2^4+Sqr(35+1) при вычислении даст 22

Выражение Sqr(8+Int(41.5)) при вычислении даст 7

Выражение 21\(Round (2.54+1)) при вычислении даст 5

Задание 9: Определите без компьютера, что напечатает данный фрагмент программы: а = (2^2+1)*(20-(2^2)^2)-11:b=11\(а-4): Debug.Print а^2+Ь-1

Типы данных и точность вычислений

Если вы считаете, что компьютер все вычисления выполняет абсолютно точно, то вы ошибаетесь. Компьютер всего лишь очень точен. Очень, а не абсолютно. В этом вы скоро убедитесь.

Integer и Long — целые числа

Создайте проект с кнопкой и введите такую программу:

Dim a As Integer

Dim b As Integer

Private Sub Command1_Click()

   a = 100

   b = 1

   Debug.Print a, b, a + b

End Sub

Работает она нормально. Посмотрим, насколько большие числа способна воспринимать наша программа. Заменим Ь=1 на b=40000. Visual Basic выдает сообщение об ошибке "Overflow", что означает "Переполнение ячейки". В чем дело?

Как вы уже знаете, в Visual Basic принято правило, что если человек объявил переменную, как Integer, то он разрешает ей принимать значения только целых чисел. Число типа Integer занимает в памяти два байта. Значит, под переменные а и Ь компьютер отводит в памяти ячейки по два байта каждая. Два байта — это маленький объем памяти и уместиться в него может лишь небольшое целое число, а именно — число в диапазоне от -32768 до 32767.

Для того, чтобы переменная имела право принимать значения больших целых чисел, она должна быть объявлена не как Integer, а как Long (Длинное Целое). Под переменную типа Long компьютер отводит в памяти 4 байта и поэтому она может принимать значения в диапазоне от -2147483648 до 2147483647.

Зачем нужен Integer, если есть Long? Ну, хотя бы для того, чтобы экономить память, она же не резиновая.

Задание 10: Население Москвы равняется а=9000000 жителей. Население Басюков равняется Ь=1000 жителей. Вся Москва переехала в Васюки. Сколько там стало жителей? Используйте переменные величины.

Single и Double — десятичные дроби

Создайте проект с кнопкой и введите такую программу:

Dim a As Single

Dim b As Single

Private Sub Command1_Click()

   a = 100.78656954325: b = 40000.1234567895: Debug.Print a, b, a + b

End Sub

Запустите проект. Вот результат:

100,7866; 40000,13; 40100,91

Как видите, Visual Basic обрезал наши длинные числа до 7 значащих цифр. Сделал он это потому, что 4 байта, отведенные под ячейку памяти для переменной типа Single, не в состоянии вместить больше. Если мы хотим иметь большую точность, то объявляем наши переменные имеющими другой тип — Double — десятичная дробь двойной точности. Под переменную типа Double компьютер отводит в памяти 8 байтов и поэтому она может быть гораздо длиннее.

Dim a As Double

Dim b As Double

Private Sub Command1_Click()

   a = 100.78656954325: b = 40000.1234567895: Debug.Print a, b, a+b

End Sub

Запустите проект. Вот результат:

100,78656954325; 40000,1234567895; 40100,9100263327

Здесь максимум — 15 значащих цифр. Если вам интересно задать в программе еще более длинное значение Ь, например, b = 40000.12345678957453457, то у вас ничего не получится, Visual Basic обрежет его прямо в программе, зная, что с такими длинными числами работать он все равно не умеет.

Зачем нужен Single, если есть Double? Ну хотя бы для экономии памяти.

Целые числа или десятичные дроби? Числовой тип Currency

Вы спросите: зачем использовать типы целых чисел Integer и Long, если типы десятичных чисел Single и Double обеспечивают нам работу и с целыми и с дробными числами? Кроме экономии памяти здесь есть еще проблема абсолютной точности вычислений. Дело в том, что при использовании типов десятичных дробей вполне мыслима ситуация, когда дважды два будет не точно 4, а, скажем, 4.00000000000381. Связано это с особенностями представления десятичных дробей в компьютерах. В большинстве реальных задач такая маленькая погрешность несущественна, однако существуют задачи, где точность нужна абсолютная. При использовании же типов целых чисел Visual Basic присматривает за тем, чтобы все числа и результаты были абсолютно точными целыми числами. Конечно, при делении в этом случае приходится округлять.