Главная страница
Навигация по странице:

  • 3.1. Целочисленный тип данных

  • 3.2. Вещественный тип

  • Учебное пособие по дисциплине Разработка языков программирования высокого уровня


    Скачать 1.74 Mb.
    НазваниеУчебное пособие по дисциплине Разработка языков программирования высокого уровня
    Дата05.03.2023
    Размер1.74 Mb.
    Формат файлаdocx
    Имя файлаLektsii_YaPVU_Lukinova_2_semestr.docx
    ТипУчебное пособие
    #970477
    страница10 из 20
    1   ...   6   7   8   9   10   11   12   13   ...   20

    Глава 3. Система типов данных языка.


    Данные, которые обрабатываются ЭВМ, могут быть числового, символьного или логического типов. При этом сложность задач, моделируемых на ЯПВУ, требует различных способов представления разнообразных данных предметной области задачи.

    Отсюда следует, что система типов данных ЯПВУ должна:

    1. Поддерживать базовые (элементарные, простые, предопределённые) типы, а именно:

    • Целый (integer)

    • Плавающий (real)

    • Логический (boolean)

    • Символьный (character).

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

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

    3.1. Целочисленный тип данных


    Целые числа, моделируемые целочисленным типом данных, представляются в компьютере в виде строки битов, причём крайний слева бит кодирует знак числа. Целочисленные типы реализуются непосредственно на аппаратном уровне. Сейчас, как правило, в компьютерах поддерживаются целые числа нескольких размеров (различных диапазонов), что нашло отражение в ЯП: имеются короткий, целый, длинный, беззнаковый форматы представлений целых чисел.

    В ЯПВУ могут быть реализованы следующие операции над целыми числами: сложение (+), вычитание (-), умножение (*), деление (/)б взятие остатка от деления (mod), возведение в степень (**), сравнение на меньше или равно (<=), сравнение на больше (>), сравнение на больше или равно (>=), унарный плюс (+), унарный минус (-), абсолютное значение (abs).

    Поясним, семантику операции “/” и “mod”. Результат операции деления всегда округляется (т.е. целый). Важно, в какую сторону производится округление. В математике округление возможно по недостатку (в сторону 0) или по избытку (в сторону положительной бесконечности). Однако для отрицательных чисел эти математические понятия отличаются: округление по недостатку – в сторону отрицательной бесконечности, а по избытку – в сторону 0.

    В ЭВМ тикже должно быть определено какое-либо правило округления: при делении положительных чисел общепринятой практикой при машинной реализации является округление в сторону нуля. Однако в большинстве ЭВМ, когда один из операндов отрицательный, результат также округляется в сторону нуля, что уже отличается от математических понятий целой части. Поэтому при разработке ЯПВУ могут быть реализованы, по крайней мере, следующие четыре решения:

    - включить проверку знака и сделать корректировку для отрицательных операндов;

    - запретить отрицательные операнды;

    - ввести две различные операции, одна из которых округляет к нулю, а другая к отрицательной бесконечности;

    - оставить так, как есть.

    3.2. Вещественный тип


    Вещественный тип т.е. тип чисел с плавающей запятой моделирует действительные числа. Однако следует помнить, что их представление всегда является аппроксимацией, т.к. ни одно из них не может быть точно представлено в виде числа с плавающей точкой. (Рис.6.)



    Рисунок 6. Внутреннее представление числа с плавающей запятой.

    Большинство ЯП содержат два типа: float (real) – стандартный размер, обычно в 4 байта памяти; и double – мантисса занимает в 2 раза больше бит памяти.

    Константы действительного типа можно представить следующими тремя способами, которые в языках являются предопределёнными:

    - запись с точкой: 10.4, -0.000000000145,

    - запись с порядком: 104E-01, -145E-12,

    - запись с точкой и порядком: 1.04E+01, -1.45E-10.

    Основные операции над данными вещественного типа: сложение (+), вычитание (-), умножение (*), деление (/), возведение в степерь (**), сравнение на равенство (=), сравнение на неравенство (/=), сравнение на меньше (<), сравнение на меньше или равно (<=), сравнение на больше (>), сравнение на больше или равно (>=), унарный плюс (+), унарный минус (-), абсолютное значение (abs).

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

    Var x, y: real;

    Begin if abs(x-y) < 0.00001 then… end.

    Кроме этого, при вычислении выражения с действительными числами возникают погрешности, которые могут оказать существенное влияние на получаемые результаты. Следующие рекомендации позволяют уменьшить погрешность вычислений:

    • При выражении ряда чисел определять все положительные и отрицательные слагаемые и складывать их поочерёдно;

    • Складывать наименьшие члены сумм первыми;

    • Избегать вычитания двух почти равных чисел; если это всё же необходимо, производить вычитание до умножения или деления (т.е. лучше записать a*(b-c), чем a*b-a*c);

    • Избегать показателей степени в форме действительных чисел, т.к. в этом случае степень вычисляется через log и exp; напротив, x**2 вычисляется как x*x;

    • Использовать операцию sqrt(x) при вычислении , т.к. sqrt обычно вычисляется точнее;

    • Использовать в процессе вычисления максимально возможную точность, если это необходимо;

    • Избегать цепочек операций, в которых используются неточные значения;

    • Использовать алгоритмы, для которых известны оценки и границы ошибок.


    1   ...   6   7   8   9   10   11   12   13   ...   20


    написать администратору сайта