русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Выделение лексем из текста программы.


Дата добавления: 2013-12-23; просмотров: 1014; Нарушение авторских прав


C= 0.000000.

DBL_MINприблизительно равно 1Е-308 (для double).

DBL_DIGравно 10 (для double).

DBL_MAXприблизительно равно 1Е+308 (для double).

Применимость вещественных данных.

Применимость вещественных данных.Даже познакомившись с различиями в диапазонах представления вещественных чисел, начинающий программист не сразу осознает различия между типами float, double и long double.Сразу бросается в глаза разное количество байтов, отводимых в памяти для вещественных данных перечисленных типов. На IBM PC:

дляfloat- 4 байта;

дляdouble- 8 байт;

дляlong double- 10 байт.

Обратив внимание на значения предельных констант, отмечают (см. Приложение 2), что максимальные значения, которые можно представить вещественными числами, определены константами:

FLT_MAXприблизительно равно 1Е+37 (для float);

Затем обращают внимание на количество верных десятичных цифр в мантиссах:

FLT_DIGравно 6 (для float);

Наконец, оценят минимальные нормализованные числа:

FLTJMINприблизительно равно 1Е-37 (для float);

Можно и дальше продолжать сравнение констант, перечисленных в описании языка (см. Приложение 2), но нужно сделать выводы относительно применимости вещественных констант и переменных разных типов. По умолчанию все константы, не относящиеся к целым типам, принимают тип double.У программиста это соглашение часто вызывает недоумение - а не лучше ли всегда работать с вещественными данными типа floatи только при необходимости переходить к double или long double?Ведь значения больше 1Е+38 и меньше 1Е-38 встречаются довольно редко.

Следующая программа (предложена С.М. Лавреновым) иллюстрирует опасности, связанные с применением данных типа floatдаже в несложных арифметических выражениях:

Результат выполнения программы:



Если в той же программе переменной а присвоить значение 100.0, то результат будет еще хуже:

 

Таким образом, запрограммированное с использованием переменных типа floatнесложное алгебраическое выражение

 

 

никак "не хочет" вычисляться и принимать свое явное теоретическое единичное значение.

Если заменить в программе только одну строку, т.е. так определить переменные:

 

 

значение выражения вычисляется совершенно точно:

 

 

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

К сожалению, ни double,ниlong doubleне снимают полностью проблем конечной точности представления вещественных чисел в памяти ЭВМ. Существенное различие в порядках значений операндов арифметических выражений может привести к подобным некорректным результатам и при использовании типов double и long.

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

Компилятор просматривает символы (литеры) текста программы слева направо. При этом его первая задача - выделить лексемы языка. За очередную лексическую единицу принимается наибольшая последовательность литер, которая образует лексему. Таким образом, из последовательности int_line компилятор не станет выделять как лексему служебное слово int, a воспримет всю последовательность как введенный пользователем идентификатор.

В соответствии с тем же принципом выражение d+++b трактуется как d++ +b, а выражение b-->с эквивалентно (b--)>с.

Следующая программа иллюстрирует сказанное:

Результат выполнения программы:



 

 

Результаты вычисления выражений n+++m, n-->m, m-->n полностью соответствуют правилам интерпретации выражений на основе таблицы рангов операций (см. табл. 1.4). Унарные операции ++ и -- имеют ранг 2. Аддитивные операции + и - имеют ранг 4. Операции отношений имеют ранг 6.



<== предыдущая лекция | следующая лекция ==>
Программы печати предельных констант. | Деление операторов языка Си на группы.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.