Текущий архив: 2003.04.03;
Скачать: CL | DM;
ВнизНачинающим программистам. Этап 3. Найти похожие ветки
← →
Юрий Зотов (2002-12-01 21:49) [0]Итак, снова идем дальше и начинаем этап 3. Предыдущие этапы см. здесь:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035226023&n=3
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035836141&n=3
Как и ранее, сначала контрольные вопросы по предыдущему этапу.
1. Сколько десятичных знаков могут хранить числа типов Single, Double и Extended? Какой диапазон значений они имеют?
2. Какие особенности имеют типы Comp и Currency по сравнению с другими вещественными типами?
3. Что такое:
- значащие цифры и незначащие нули?
- абсолютная и относительная погрешность?
- мантисса и порядок?
- нормализация мантиссы?
- приведение (или выравнивание) порядка?
- исчезновение порядка?
- машинный ноль?
- машинное эпсилон?
- ошибка округления?
- накопление ошибки округления?
4. Написать на Паскале функцию, вычисляющую машинное эпсилон для чисел типа Extended. При вычислениях учеть реально используемый аппаратный тип FPU.
5. Как следует изменить условие if X=Y, чтобы добиться его надежной проверки, если известно, что X и Y имеют тип Double и их значения были вычислены с точностью 5 десятичных цифр?
6. Даны вещественные числа X и Y, каждое из которых имеет относительную погрешность E. Доказать, что относительная погрешность их разности E1 будет равна E*Abs((X+Y)/(X-Y)). Во сколько раз E1 будет превышать E, если Y=0.999*X?
7. Даны числа X=1.23456 и Y=1.23457. Каждое из них имеет погрешность в 5-м десятичном знаке. В каком знаке будет иметь погрешность разности этих чисел?
8. Даны числа X=1.23456 и Y=1.23457. Написать функцию, вычисляющую их сумму для 2-х случаев - когда оба числа имеют тип Single и Double. Почему результаты различаются?
9. Дано выражение R:=A-B+1, в котором все переменные имеют тип Single. Известно, что значения A и B очень близки друг к другу. Как следует переписать это выражение, чтобы получить результат с минимальной погрешностью?
Если мы точно, аккуратно и полностью выполнили это и все предыдущие задания, то мы должны знать и понимать:
- позиционные системы счисления и все виды машинной кодировки чисел;
- их 2-ное и 16-ное строковые представления;
- различие между знаковыми и беззнаковыми целыми числами;
- все арифметические и логические операции, включая унарные;
- принятое в Delphi старшинство операций;
- как проверить или выставить любую комбинацию бит в любом целом числе;
- что такое знаковый бит, разрядная сетка и ее переполнение;
- назначение флагов CF и OF в регистре флагов CPU;
- все типы целых чисел в Delphi (включая Int64), их размер и диапазон значений;
- "непаскалевские" типы целых чисел и их соответствие "паскалевским";
- все функции Delphi для работы с целыми числами, их переводом в строку и обратно;
- директивы компилятора $Q и $R, управление ими при помощи мышки;
- "научную" нотацию и машинный формат вещественных чисел;
- что такое мантисса и порядок (экспонента), нормализация и приведение порядка;
- все типы вещественных чисел в Delphi, включая Comp, Currency, TDate/Time, Real и Real48;
- директиву компилятора $REALCOMPATIBILITY;
- размер, точность и диапазон значений всех вещественных типов;
- что такое INF, NAN, управляющее слово FPU, переменная Default8087CW и процедура Set8087CW;
- термины Underfow и Overflow, "исчезновение порядка", "машинный ноль" и "машинное эпсилон";
- усечение, округление и бухгалтерское округление вещественных чисел;
- ошибки округления и их накопление в цепочках вычислений;
- особенности сравнения вещественных чисел и других операций с ними;
- все функции Delphi для работы с вещественными числами, включая содержащиеся в модуле Math.
Для чего я все это тут перечислил? Естественно, не для того, чтобы мы с Вами подумали, какие мы уже умные и грамотные. А для того, чтобы КАЖДЫЙ сопоставил этот список со своими реальными знаниями, и, если они не соответствуют, то знал бы, какие пробелы ему следует ликвидировать. Причем обязательно и как можно быстрее - потому что все это азбука, без знания которой двигаться дальше нельзя.
См. окончание.
← →
Юрий Зотов (2002-12-01 21:50) [1]===== окончание ======
А теперь - задание на текущий, третий этап.
Следующая наша задача - завершить освоение простых (их еще называют скалярными) типов данных (кроме указателей, о которых речь пойдет особо). К простым типам относятся:
- целые и вещественные числа (которые мы, надеюсь, уже изучили);
- символьный тип char (или character - не путать со строками и PChar!!!);
- логический тип boolean;
- перечисляемый тип (enumerated);
- тип-диапазон (subrange);
- указатели (которые мы пока не трогаем, потому что это очень важная тема и мы будем рассматривать ее особо и подробно).
Все простые типы (simple types), кроме вещественных чисел, относятся к так называемым порядковым типам (ordinal types). Слово "порядковый тип" означает, что данные такого типа имеют конечное число возможных значений, упорядоченных по возрастанию. Вещественные же числа (real types или floating-point types) имеют неограниченное количество значений и поэтому к порядковым не относятся. Строго говоря, из-за конечности своего представления вещественные числа тоже имеют ограниченное количество значений, но в математике это не так, и поэтому в программировании тоже считается, что вещественные типы имеют как бы бесконечное количество возможных значений. Во всяком случае, это количество если и не бесконечно, то огромно.
Задача - разобраться со всей этой кухней. В справке набираем "data types", жмем "показать" и выбираем раздел "Data types and variables. Overview". На открывшейся странице сразу кликаем линк "Topic groups" и слева получаем боковое окно, в котором перечислены все интересующие нас типы данных. Кликаем, читаем, изучаем.
НАСТАЛО САМОЕ ВРЕМЯ ИСПОЛЬЗОВАТЬ ЕЩЕ И КНИГУ, А НЕ ТОЛЬКО ХЕЛП!!! Исключительно полезно найти таблицу ASCII-символов и изучать тип char прямо по ней. Таблица эта есть в очень многих книжках - загляните в приложения в конце.
Что нужно усвоить:
- размер данных каждого типа и диапазон их возможных значений;
- что char и byte - это одно и то же, только по-разному трактуется;
- что все порядковые типы - это фактически просто целые числа;
- как задавать собственные переслимые типы и собственный тип-диапазон;
- как приводить данные олного порядкового типа к другому;
- директиву компилятора $R.
Задание довольно простое и по его завершении мы уже будем готовы начать изучение того "а как же это работает внутри". Делать мы это будем на замечательном и очень наглядном учебном пособии под названием "микрокалькулятор MK-61". Несмотря на название, штука эта на самом деле представляет собой самый настоящий компьютер (что нам и требуется), пользоваться которым хоть и не сложно, но тоже надо уметь. В связи с этим еще задание.
1. Скачать себе эмулятор MK-61.
Он есть здесь: http://www.emulator3000.com/rus-c3.htm
и здесь: http://umbra.chat.ru/mk61ins.exe
Это две разные программы, пользоваться можно любой из них. Первая содержит в себе целую кучу красивых калькуляторов (из которых нам нужен ТОЛЬКО MK-61). Вторая не такая красивая, зато с хелпом (раскрывается в боковом окне и дает подсказку по клавише при наведении мыши на нее).
2. Освоить скачанную программу и научиться пользоваться калькулятором в АВТОМАТИЧЕСКОМ (то есть РУЧНОМ) режиме. Режим ПРОГРАММИРОВАНИЯ пока не трогайте, его мы и будем изучать вместе. Инструкция по MK-61 находится здесь:
http://neox.pri.ee/mk61manual
Нужно освоить главы 4 и 6 - то есть, просто научиться считать не этой машинке вручную, но делать это уверенно.
Там нет ничего хитрого, только надо усвоить что сначала вводятся ОБА числа, а уже потом нажимаем ЗНАК действия и получаем результат (то есть XY+, а не X+Y, как на бухгалтерских калькуляторах). Кстати, это хорошая иллюстрация использования так называемой "польской записи", о которой мы еще, надеюсь, поговорим - а сейчас скажу о ней только вот что.
Часто на форуме звучат вопросы о написании интерпретаторов, вычислениях по формуле, заданной строкой и пр. Так вот - если кто надумает написать такой интерпретатор, то без польской записи он вряд ли сможет что-то сделать. Поскольку именно она используется для трансляции (и интерпретации) арифметических и логических выражений.
Итак - скачать MK-61 и освоить его в режиме ручных вычислений. И, конечно, выполнить 9 приведенных в начале упражнений на закрепление пройденного, а также закончить изучение простых типов данных. Срок на все на это - примерно пара недель, а потом двинемся дальше.
← →
Юрий Зотов (2002-12-01 22:00) [2]Забыл добавить.
Народ, внимание! Перед запуском калькуляторов рекомендую все же проверить их на вирусы. Если кто что обнаружит - срочно пишите сюда.
← →
Shadow (2002-12-01 22:06) [3]2Юрий Зотов
Достойное у вас занятие!
← →
Denvor (2002-12-01 23:33) [4]2Юрий Зотов:
Вы, конечно, хорошим делом занимаетесь, но эти уроки уйдут в архив и все про них забудут, ведь в форуме поддерживаются обсуждаемые ветки.
Лучше забросить это на сайт-домашнюю страничку и давать тут ссылки. Тогда люди при возникшей необходимости будут заходить к вам время от времени.
Хорошо бы было поподробнее рассказать о событиях в МАСТ ДАЕ и прочих, частозадаваемых и надоевшим вам темам. Что бы быть всегда интересным мастеру надо понемногу раскрывать свои секреты, но не доконца (без секретов мастер не есть мастер).
А ещё лучше написать книгу для неновичков. У нас в Киеве просто вакуум на такую литературу.
← →
Юрий Зотов (2002-12-02 00:09) [5]Напоминаю просьбу ко всем.
Эти ветки предназначены для вопросы по сабжам и ответов на них. Конечно, никто не может запретить постить сюда что угодно, но ОЧЕНЬ прошу не замусоривать их ничем, не относящимся НАПРЯМУЮ к теме.
Все мнения, пожелания и пр. приветствуются и Вы можете высказать их здесь:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3
← →
StAL (2002-12-02 17:31) [6]To Юрий Зотов
Спасибо за обучение!
Принялся за третий этап, и сразу огромное количество вопросов по заданиям
3)
- значащие цифры и незначащие нули? ?????
Значащие цифры - просто цифры числа? А незначащие нули - нули, слева от целой части? Так?
- абсолютная и относительная погрешность? ?????
?????
- мантисса и порядок? понятно, но не до конца. Где-то на 7 баллов
Мантисса - к-во дес. знаков? E-?????
- нормализация мантиссы?
----"----
Как-то не понятно это описано в статье А. Григорьева. Хотя, наверное, это для тех, кто уже прошел ВУЗ, а я еще школу даже не закончил. Еще 1,5 года
- приведение (или выравнивание) порядка? ?????
Это вовсе первый раз слышу
- исчезновение порядка? ?????
----"----
- машинный ноль? ?????
----"----
- машинное эпсилон? вроде-бы понятно
- ошибка округления? ?????
----"----
- накопление ошибки округления? ?????
----"----
4) Я даже не понимаю, что такое FPU
5), 6), 7), 8), 9) Я НИЧЕГО НЕ ПОНИМАЮ!!!! :"( ОТКУДА ЭТО ВСЕ БРАТЬ. РАНЬШЕ ХОТЬ СТАТЬИ БЫЛИ? :(((((((((((((
Я понимаю, что со мной много мороки, что я еще мало знаю, но все-же, не могли-бы Вы направить меня.
ПОМОГИТЕ!!!!
Большое Вам спасибо! Жду Вашего ответа с нетерпением.
С ув. Алексей
← →
al_ (2002-12-17 20:26) [7]Инструкцию по кальк.МК61 изучил :) Готовность №1. Скоро продолжение?
← →
Jeer (2002-12-17 22:38) [8]http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035122594&n=3
← →
Top Gun (2002-12-27 22:46) [9]Интересно насчет следующих этапов узнать
И почему на сайте delphi.adlen.ru третий этап не выложен ?
← →
Top Gun (2002-12-27 22:47) [10]http://neox.pri.ee/mk61manual тоже не работает
Проект загнулся ?
← →
Хмырь (2002-12-28 02:15) [11]2Юрий Зотов
Е-мое! И Вы молчите о своих персональных уроках????
Да я три месяца на мастаковском форуме висю, и только шас узнал!
Уже сейчас берусь за наверстывание упущенного :-)
2ALL
Господин Зотов - герой! От имени всех ламеров и чайников, вернее (пардон, я оговорился) начинающих программистов, выражаю Вам безграничную благодарность!
2Denvor
Полностью с Вами согласен.
← →
Top Gun (2002-12-28 12:06) [12]Дико извиняюсь, что пишу сюда... Но ответьте, ПОЖАЛУЙСТА, проект загнулся или как ?
← →
Neox (2002-12-28 13:04) [13]2Top Gun
http://neox.pri.ee/mk61manual не работал из-за проблем с сервером, где это лежит (не обрабытываются php файлы). Админу я уже отписал, а пока поменял расширения на html.
← →
Юрий Зотов (2002-12-28 13:20) [14]В течение почти месяца я тоже думал, что проект загнулся, поскольку в нем остались лишь StAL, да я. Поэтому и не отвечал - ждал, откликнется ли кто-либо еще. САМ, без моих напоминаний.
Теперь вижу, что проект все же не загнулся, что он все же кому-то нужен. ОК, в ближайшее время ждите новостей. Нужно решить ряд оргмероприятий, восстановить инструкцию, написать небольшую статью по вопросам, поднятым StAL"ом и подготовить следующий этап.
По поводу запуска проекта на отдельном сайте - вопрос решается. Вероятно, изменится и его организация - она приблизится к обычной (и проверенной временем) организации заочного обучения.
Просьба к Мастерам и ко всем тем, кто хорошо усвоил материал - ответить в этой ветке на вопросы StAL"а. Только без флейма, pls - коротко, точно, конкретно, четко и ясно. Это помогло бы мне сэкономить время, а всем остальным - лучше понять материал. Заранее спасибо.
← →
Abu (2002-12-28 16:42) [15]to StAL
1. Значащие цифры в приближённых вычислениях, все цифры числа, начиная с первой слева, отличной от нуля, до последней, за правильность которой можно ручаться. Например, в записи результата взвешивания 0,03020 кг значащими цифрами будут 3, 0, 2 и 0.
2. Незначащие нули -- нули записанные слева в числе
3. Если a - точное значение некоторой величины, а* - известное приближение к нему, то абсолютной погрешностью приближения a* называют обычно некоторую величину d(a) , про которую известно, что она удовлетворяет неравенству:
| a* - a| =< d(a)
Относительной погрешностью называют некоторую величину o(a) , про которую известно, что она удовлетворяет неравенству:
| (a* - a)/a* |=< o(a)
Относительную погрешность часто выражают в процентах. Она дает более точное представление о величине ошибки, содержащейся в некоторой величине.
4. Любое число N в системе счисления с основанием q можно записать в виде N = M * q в степени p, где M — множитель, содержащий все цифры числа (мантисса), а p — целое число, называемое порядком. Например, в десятичной с-ме счисления :
0,0123 представляется как 0,123 * 10 в степени -1,
где 0,123 - мантисса
-1 - порядок
Такой способ записи чисел называется представлением числа с плавающей точкой.
5. Число называется нормализованным, если мантисса(М) является правильной дробью, у которой первая цифра после точки (запятой в обычной записи) отлична от нуля и выполняется условие:
0.1 <= |M| < 1.
Если это требование выполнено, то число называется нормализованным.
6. Если результат арифметической операции имеет тип с плавающей точкой, то он может оказаться меньше того, которое может быть записано в разрядной сетке. Этот случай называется исчезновением порядка.
7. Числа по абсолютной величине меньше Аmin (единицы младшего разряда n-разрядной машинной сетки) называется машинным нулем;
8. Ошибка округления - разность между реальным числом и его приближением.
Например, в 10-чной системе счисления:
реальное число - 0.1234567123456
приближенное - 0.123
ошибка округления - 0.0004567123456
в 2-чной:
реальное число - 0,000110011001100110011001100... (0.1 - в 10-чной)
приближенное - 0,000110011
ошибка округления - 0,000000000001100110011001100...
В большинстве прикладных программ двоичные числа предпочтительны, однако в некоторых ситуациях ошибка округления в преобразованиях между системами счисления с основаниями 2 и 10 нежелательна. Наиболее характерным случаем здесь являются финансовые или учетные задачи, где предполагается сложение центов. Рассмотрим программу, складывающую по 1-му до 100 центов и вычитающую доллар:
i : Integer;
x : Single;
x:=0.0;
for i:= 0 to 100 do
x = x + 0.01;
x = x - 1.0;
Label1.Caption:=FloatToStr(x);
Правильным ответом является 0.0, однако ответ, полученный данной программой, будет малой величиной, близкой к 0.0. При вычислении ошибка округления, возникающая во время преобразования 0.01 в двоичное число, накапливается. Изменение типа x на double или extended только уменьшает ошибку вычисления, но не устраняет ее вообще. Поэтому в этих случаях используется тип Currency.
← →
StAL (2003-01-03 14:44) [16]To Abu
Спасибо!!!!!!!!!!!
Распечатал и повесил на стенке.
С нетерпением жду статьи Юрия Зотова и след. этапа!
СПАСИБО Юрию Зотову и Abu!
С ув. Алексей
← →
Shadow (2003-01-03 15:18) [17]up
← →
Top Gun (2003-01-12 15:53) [18]Эх...
Наверное, у Юрия Зотова что-то в жизни происходит...
Жедаю побыстрее избавиться от проблем, чтобы продолжить обучающий курс !
P.S. Все мы эгоисты...
← →
Юрий Зотов (2003-01-12 16:06) [19]Увы, да, происходит, очень неприятное и очень серьезное. От исхода во многом будет зависеть вся будущая жизнь и судьба. Без преувеличения. Поэтому приходится очень много времени тратить на решение этого вопроса, а он совсем непростой.
Народ, прошу понять и пока потерпеть. Я и на форум-то сейчас урывками выхожу - на большее просто нет времени.
← →
Top Gun (2003-01-16 18:11) [20]чтобы тема не удалилась...
← →
Top Gun (2003-01-18 18:19) [21]блин, а через сколько дней тема удаляется, если в нее нет новых постов ?
← →
Abu (2003-01-22 11:08) [22]Up
← →
Top Gun (2003-01-29 17:57) [23]Up
&
down
← →
Top Gun (2003-02-02 20:34) [24]Я верю в чууудесааа
← →
Иванов Сергей (2003-02-02 21:08) [25]http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035226023&n=3
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1035836141&n=3
не работает. а хочется посмотреть.
← →
Иванов Сергей (2003-02-02 21:23) [26]кстати,
1. Значащие цифры в приближённых вычислениях, все цифры числа, начиная с первой слева, отличной от нуля, до последней, за правильность которой можно ручаться. Например, в записи результата взвешивания 0,03020 кг значащими цифрами будут 3, 0, 2 и 0.
2. Незначащие нули -- нули записанные слева в числе
а может справа?//
← →
Top Gun (2003-02-09 14:08) [27]Мы верим
Мы надеемся
← →
Top Gun (2003-02-15 13:24) [28]ау
← →
Труп Васи Доброго (2003-02-15 14:12) [29]
> Мы верим
> Мы надеемся
Мы ждём и не дождёмся!!!
← →
Abu (2003-02-24 18:10) [30]Ой
← →
Marser (2003-02-25 09:40) [31]>Юрий Зотов ©
От всего сердца желаю вам выйти из трудной ситуации с минимальными потерями!
← →
al_ (2003-02-26 18:52) [32]Скажите пожалуйста продолжение будет или нет? Почему стоим?
← →
jack128 (2003-02-26 21:40) [33]2 Иванов Сергей (02.02.03 21:08)
видимо надо рыть в архивах..
2 al_ © (26.02.03 18:52)
Стоим потому что Юрий Зотов не может продолжить (надеюсь "пока не может")
2 Юрий Зотов © Присоединяюсь к пожеланию Marser"a. А ещё лудше, чтоб вы вышли из этой ситуации с прибылью
← →
Top Gun (2003-02-28 18:00) [34]up
← →
app (2003-02-28 19:13) [35]Не надо поднимать ветку, если Юрий Зотов будет физически готов продолжать, то он или создаст новую или подымет эту.
Понятно желание, но и с предполагалась и такая вероятность тоже, в связи с отсутствием интерактивности.
← →
Top Gun (2003-03-01 20:06) [36]Хм. Да ? А я как заметил, если ветку не поднимать - то она удаляется =(
А никто случаем не знает, что с Юрием ? Его теперь вообще что-то не видно...
← →
Andryk (2003-03-01 23:00) [37]2Top Gun Да у нас на работе все телефоны полетели, вот уже две недели :о(, вот поэтому Юрий и пропал.
← →
Anatoly Podgoretsky (2003-03-01 23:15) [38]Top Gun (01.03.03 20:06)
Это не страшно, если будет продолжение, то будет новая ветка, так что не надо поднимать, сохрани если нужно в архиве вместе со ссылкой.
← →
Top Gun (2003-03-04 18:23) [39]Andryk, вы с ним в однои месте работает ? У него все ок ?
← →
Юрий Зотов (2003-03-04 23:26) [40]Сбылось! Здесь этап 4:
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1046809017&n=3
← →
Maxim_____ (2003-03-17 02:55) [41]где бы узнать e-mail Юрия Зотова?
← →
Юрий Зотов (2003-03-17 04:05) [42]> Maxim_____ & All
Мой e-mail был открыт для всех на многих конференциях примерно 3 года. И, уверяю Вас, за все это время ни одного письма и ни одного вопроса в них без ответа не осталось (а было их, можете поверить, совсем немало, счет идет в тысячах). Но где-то с год назад нашлись какие-то недоумки-трояновирусописатели, которым я на этом же форуме открытым текстом сказал, кто они есть, как люди, и чего они стоят, как программисты. Ну и эти деятели не придумали ничего лучшего, как начать бомбить мой ящик мусором и своими гениальными творениями размером со слона (на что рассчитывали - непонятно). Несколько дней я еще посмеялся, но затем это многомегабайтное дерьмо надоело и я просто сменил адрес. С тех пор предпочитаю не давать его незнакомым людям и, тем более, не публиковать. И, если Вы давно на форуме, то, наверное, заметили, что так поступил не я один - видимо, и у других были на то подобные причины.
Так что все благодарности - в адрес этих юных гениев, please. А если есть какой-то вопрос - так задайте его в форуме, он же для того и предназначен.
P.S.
> Модераторам.
Прошу не рассматривать это сообщение, как личную переписку, поскольку данный ответ адресован не только конкретному человеку.
← →
Maxim_____ (2003-03-17 16:44) [43]Первый вопрос. Где можно найти первый, второй и третий этапы? Эти ветки, почему-то удалены на форуме.
Если вас не затруднит, пришлите мне их на e-mail, с анонимного ящика.
← →
Юрий Зотов (2003-03-17 17:50) [44]Они не удалены, они в архивах. Ссылка на архивы есть внизу страницы, а что в каком архиве лежит - сказано на 4-м этапе (см. ссылку выше). Кроме того, Malder все выложил на отдельном сайте (ссылка на него тоже есть на 4-м этапе).
Страницы: 1 2 вся ветка
Текущий архив: 2003.04.03;
Скачать: CL | DM;
Память: 0.6 MB
Время: 0.01 c