69738

Програми друку граничних констант

Домашняя работа

Информатика, кибернетика и программирование

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

Украинкский

2014-10-09

38 KB

0 чел.

Самостійне вивчення

Тема 2: Програми друку граничних констант.

Введених засобів препроцесора і мови цілком достатньо для програми, що виводить на друк (на екран дісплея) значення констант, що визначають в конкретній системі (для конкретного компілятора) межі зміни даних різних типів. Кажучи про іменовані константи, треба відзначити, що серед стандартних заголовочних файлів компілятора завжди є файли limits.h і float.h, що включають препроцесорне визначення граничних констант. Наступна програма друкує деякі із значень граничних констант для цілих типів, визначених конкретною реалізацією компілятора з мови Сі.

#include <stdio.h>

#include <limits.h> /* Визначення граничних цілочисельних констант*/

void main( )

{

printf("\nCHAR_BIT=%d", CHAR_BIT);

printf("\nSCHAR_MIN=%d\t\tSCHAR_MAX=%d",SCHAR_MIN,SCHAR_MAX);

printf("\nUCHAR_MAX=%d", UCHAR_MAX);

printf("\nINT_MIN=%d\t\tINT_MAX=%d", INT_MIN,INT_MAX) ;

printf("\nLONG_MIN=%ld\tLONG_MAX=%ld", LONG_MIN, LONG_MAX);

}

Результат виконання програми з компілятором Turbo С:

CHAR_BIT=8

SCHAR_MIN=-128                          SCHAR_MAX=127

UCHAR_MAX=255

INT_MIN=-32768                          INT_MAX=32767

LONG_MIN=-2147483648             LONG_MAX=2147483647

У викликах функції printf() потрібно звернути увагу на специфікації перетворення. Всі константи цілочисельні, тому використовується специфікатор 'd'. Для величин типу long потрібно модифікатор 'l', тобто константи LONG_MIN і LONG_MAX виводяться з використанням специфікацій перетворення %ld. У всіх специфікаціях перетворення відсутнє зведення про довжину зображення значень, що виводяться. Кількість позицій в зображеннях констант залежить від їх значень. Управляючі послідовності '\n' і '\t' забезпечують при виводі відповідно переходи на нові рядки і табуляцію.

Для виводу дійсних значень з мантисою і порядком в рядку формату функції printf( ) потрібно використати специфікацію %е. Наступна програма виводить на екран значення деяких з граничних дійсних констант:

#include <stdio.h>

#include <float.h> /* Визначення граничних дійсних констант*/

void main( )

{

printf("\nFLT_EPSILON=%e", FLT_EPSILON);

printf<"\nDBL_EPSILON=%e", DBL_EPSILON);

printf("\nFLT_MIN=%e\tFLT_MAX=%e", FLT_MIN, FLT_MAX);

printf("\n \t \t \tDBL_MAX=%e", DBL_MAX);

printf("\nFLT_MANT_DIG=%d", FLT_MANT_DIG);

printf ("\nDBL_MANT_DIG=%d", DBL_MANT__DIG) ;

}

Результати виконання програми з компілятором Turbo C:

FLT_EPSILON=1.192093е-07

DBL_EPSILON=2.22044бе-16

FLT_MIN=1.1754 94e-38             FLT_MAX=3.402823е+38

                                                   DBL_MAX=1.797693е+308

FLT_MANT_DIG=24

DBL_MANT_DIG=53

Надруковані константи FLT_EPSILON і DBL_EPSILON - максимальні значення типів float і double, сума кожного з яких із значенням 1.0 не відрізняється від 1.0. Граничні константи FLT_EPSILON і DBL_EPSILON називають "машинними нулями" щодо дійсного значення 1.0. FLT_MIN, FLT_MAX і DBL_MAX - граничні значення для дійсних даних. FLT_MANT_DIG, DBL_MANT_DIG - кількість двійкових цифр (бітів) в мантисах відповідно чисел типу float і double.

Застосування дійсних даних.

Навіть познайомившись з

На IBM PC:

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

•  для double - 8 байт;

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

Звернувши увагу на значення граничних констант, відмічають, що максимальні значення, які можна представити дійсними числами, визначені константами: FLT_MAX приблизно рівно 1Е+37 (для float);DBL_MAX приблизно рівно 1Е+308 (для double).Кількість вірних десяткових цифр в мантисах: FLT_DIG рівно 6 (для float);DBL_DIG рівно 10 (для double).  Мінімальні нормалізовані числа:

FLT_MIN приблизно рівно 1Е-37 (для float);

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

За замовчанням всі константи що не відносяться до цілих типів, приймають тип double.

Наступна програма ілюструє небезпеки, зв'язані із застосуванням даних типу float навіть

в нескладних арифметичних виразах:

#include <stdio.h>

void main(   )

{

float а,   b,   з,   t1,   t2,   t3;

a=95.0;

b=0.02;

t1= (a+b) * (a+b) ;

t2=-2.0*a*b-a*a;

t3=b*b;

c=(tl+t2)/t3;

printf("\nc=%f\n",   з); }

Результат виконання програми: c=2.441406

Якщо в тій же програмі змінної а присвоїти значення 100.0, то результат ще гірше:

с=0.000000.

Таким чином, запрограмоване з використанням змінних типу float нескладний алгебраїчний вираз

ніяк не "хоче" обчислюватися і приймати своє явне теоретично одиничне значення.

Якщо замінити в програмі тільки один рядок, тобто так оголосити змінні:

double а,   b,   c,   tl,   t2,   t3;

значення виразу обчислюється абсолютно точно: с=

1.000000

Наведений приклад і загальні положення обчислювальної математики примушує істотно обмежити застосування змінних типу float.

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

На жаль, ні double, ні long double не знімають повністю проблем кінцевої точності представлення дійсних чисел в пам'яті ЕОМ. Істотна відмінність в порядках значень операндів арифметичних виразів може привести до подібних некоректних результатів і при використанні типів double і long double.

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

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

Відповідно до того ж принципу вираз d+++b трактується як d++   +b, а вираз b-->с еквівалентно (b--)>с. Наступна програма ілюструє сказане:

#include <stdio.h>

void main()

{

int n=10,m=2;

printf("\nn+++m=%d",n+++m);

printf("\nn=%d, m=%d",n,m);

printf("\nm—>n=%d",m—>n);

printf("\nn=%d, m=%d",n,m);

printf("\nn—>m=%d",n—>m);

printf("\nn=%d, m=%d",n,m); }

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

n+++m=12

n=11,m=2

m—>n=0

n=11, m=l

n-->m=l

n=10,m=l

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


 

А также другие работы, которые могут Вас заинтересовать

32195. Тактика задержания и личного обыска 33 KB
  Тактика задержания и личного обыска Задержание это неотложное следственное действие с целью захватить лицо подозреваемое в совершении преступления доставить и водворить в изолятор временного содержания. Подготовка к задержанию и аресту включает в себя: 1 изучение лица подлежащего задержанию и аресту; 2 определение времени и места задержания; 3 решение вопроса о количественном и персональном составе группы задержания; 4 определение обязанностей участников задержания какие действия и в какой последовательности им надлежит совершать до...
32196. Особенности предъявления для опознания трупов 28.5 KB
  Особенности предъявления для опознания трупов Трупы предъявляются для опознания в тех случаях когда нет возможности установить личность умершего по документам либо когда внешность трупа значительно изменена. При обнаружении такого трупа прежде всего устанавливают кто из жителей данной местности региона города поселка деревни пропал без вести. Раздельное предъявление трупа и предметов находившихся при нем одежда очки дипломат трость часы и т. позволяют точнее соблюсти норму закона о порядке предъявления каждого из объектов...
32197. Понятие следственной ситуации. Классификация следственных ситуаций и их роль в раскрытии и расследовании преступлений 34.5 KB
  Понятие следственной ситуации. Характеристика следственной ситуации носит по отношению к процессу расследования преимущественно внешний характер: это характеристика условий в которых протекает данный процесс. Объективные факторы это те не зависящие от участников расследования причины которые вызывают изменения ситуации; субъективные факторы причины порождаемые действиями и поведением участников расследования и иных лиц оказавшихся в той или иной степени втянутыми в сферу судопроизводства. Сочетание всех этих компонентов обусловливает...
32198. Соотношение следственного действия, тактического приема и нормы права 23.5 KB
  Соотношение следственного действия тактического приема и нормы права. Следственные действия действия по собиранию и проверке доказательств осуществляемые следователем органом дознания прокурором судом в установленном законом порядке. Следственными действиями являются: допрос очная ставка обыск и выемка арест имущества осмотр и освидетельствование предъявление для опознания людей и предметов следственный эксперимент. Тактический прием адекватный ситуации способ воздействия на объект документ предмет человека способствующий...
32199. Особенности производства очной ставки с участием н/летних 30.5 KB
  Особенности производства очной ставки с участием н летних. Принимая решение о производстве очной ставки с участием несовершеннолетних особенно малолетних следователь прежде всего должен учитывать особенности их психики и влияние этих особенностей на ход и результаты очной ставки. К тому же несовершеннолетним особенно малолетним нередко присущи фантазия преувеличение иллюзии воображение подражание что служит причиной многих ошибок в показаниях Если же возникшее противоречие иным путем устранить не удалось перед следователем встает...
32200. Венецианская штукатурка 41 KB
  Венецианская штукатурка пришла из Древнего Рима, где мрамор был обыденным материалом для возведения зданий и их украшения. После его обработки оставалось достаточно много мраморной крошки и пыли, которую предприимчивые мастера начали использовать в качестве штукатурки
32201. Звук и, и буквы Ии 37.5 KB
  Ставим ручку на верхнюю линеечку рабочей строки, опускаемся по прямой наклонной линии вниз, выполняем поворот на месте, поднимаемся по крючку до середины, пишем «секрет», по «секрету» прямая наклонная линия вниз, поворот на месте, крючок до середины.
32202. Тактика предъявления для опознания живых лиц 24 KB
  Тактика предъявления для опознания живых лиц. изменены на короткое время кримка разработала тактич правила проведения опознания по функц признакам. Делится как бы на 2 этапа: 1 опознаваемый не знает что его предъявляют для опознания опознаваемый и опознающий находятся в разных комнатах 2 После того как он опознан их заводядт в один кабинет и сост протокол. Общие правила предъявления: 1 предъявлению предшествует допрос опознающего лица при чём обращается внимание на два обства надо выяснить условия в которых опознающий наблюдал...
32203. Тактика предъявления для опознания предметов 23.5 KB
  Следль спрашивает узнает ли опознающий данный предмет среди предъявленных и при положит ответе предлагает указать признаки по которым опознан вещь. Если опознающий сообщил какието новые детали не указанные им на допросе они дословно фиксирся в протоколе а опознающий допрашивается о причинах по которым он не сообщил своевременно и признаках предмета. Если опознающий пожелает надо разрешить ему взять вещь в руки.