23.10.2003 21:15 Vlasov A. | Машинная точность... А расскажите мне , пожалуйста , про эту EPS. Главное: как ее считать? С глубоким уважением Искренне Ваш А.Власов.
|
24.10.2003 13:07 Дата регистрации: 21 год назад Посты: 278 | что такое и как считать Машинная точность - максимальное число eps такое что: 1+eps == 1 Как считать: for ( double eps=1. ; 1+eps != 1 ; eps*=0.5 ); Тема закрыта?
|
01.11.2003 20:29 Дата регистрации: 20 лет назад Посты: 6 | Двойка. И что, в таком виде у Вас эту задачу приняли? Вполне забавно видеть правильную формулировку и абсолютно неправильный ответ. Вычисленное eps в двоичной системе счисления имеет вид: 0.00~01 (порядка 15-16 нулей для float, 24-25 для double), но, тем не менее, можно указать число, большее eps и обладающее теми же свойствами, например 0.00~011=eps+(eps/2). Так что, одним только циклом тут не обойтись: или нужно добавлять еще один цикл(что проще), или вычислять real_eps=eps * 2*(1 - eps) = 0.00~011~11. Еще одна(не самая простая) подзадача - сделать так, чтобы вычисления велись не на регистрах, а в памяти, ибо gcc все float перед выполнением операций конвертирует в double. 8)
|
03.11.2003 13:51 Дата регистрации: 21 год назад Посты: 278 | Ты собрался найти ее абсолютно точно? машинная точность это оценка! не более того! Если ты мне скажещь что машинная точность равна 1e-19+1e-20, то я тебя всегда приведу число большее обладающее этими свойсивами например твоя точность+1е-100 Поэтому не надо кидать понтов про двойку. P.S. препод который принял такое решение носил фамилию Богачев. Может слышал про такого?
|
06.11.2003 22:19 Дата регистрации: 20 лет назад Посты: 6 | Несомненно. 8) Машинная точность - это _максимальное_ число, такое что... и т.д. Т.к. чисел с плавающей точкой конечное число, то максимальное, обладающее искомым свойством, на мой взгляд, стОит указывать точно, а не выдавать за ответ число, чуть ли не вдвое его меньшее. "моя точность"+1е-100 округлиться до "моей точности". Я говорил про то, что MACH_EPS не является степенью двойки. Возможно, у меня неправильный взгляд на вещи, но мое ботанское мировоззрение настаивает на том, что "понимание задачи входит в условие задачи" (с), а если преподаватель, даже такой чудесный, как Богачев или Ищенко, принимает оценку вместо точного ответа - это означает лишь то, что он не сомневается в том, что Вы можете вычислить и точное число.
|
07.11.2003 00:14 Дата регистрации: 21 год назад Посты: 78 | Сам умный - других не грузи IMHO, дело действительнов БОТАНСКОМ мировоззрении. Нам, простым смертным не дано. Извини, если хамлю. Ты же не программу для запуска ядерной боеголовки пишешь. Не надо показывать преподам, тем более Богачеву и ему подобным, и бедному Vlasov`у, что ты крут безмерно. Тебя же не на слабо разводят, эту задачу КЮБ дает для совсем других целей. Соответсвенно и требования выдвигает вычислить только порядок. Vlasov A. спрашивал про MACH_EPS. Следует, конечно, объяснить что это число такое ... Но показать цикл, который Lucifer написал. Это не есть решение ПРИНЯТОЕ КЮБ, а решение ДАННОЕ им самим. IMHO, можно и нужно считать, что это именно то, что требуется от студента мехмата. А те, кто жаждет справедливости и абсолютной точности, такие вопросы не задают, а в личном порядке убеждает препода в своей крутости.
|
10.11.2003 13:53 Дата регистрации: 21 год назад Посты: 278 | thanks SPeres 2SPeres: Спасибо, что ответил за меня. А некоторые {смодерировано мной самим} всегда мешают людям разобратся. Вместо того, чтобы дать нормальный ответ начинают разводить философию
|
13.11.2003 14:45 F1 | да ничего подобного Если вы, господа, так заботитесь о том, чтобы человек разобрался, то объяснили бы, ПОЧЕМУ такое решение работает и В КАКИХ СЛУЧАЯХ оно будет верным, а не подсовывали бы Богачевский цикл - типа "вот тебе решение в зубы, не грузись". Что-то мне подсказывает, что Богачев, если, конечно, он этот цикл давал, соответствующие вопросы объяснил. А у вас что выходит? 1. приведенное решение на самом деле, как и заметил DiZzy, не удовлетворяет приведенному определению, т.к. дает лишь представимую в выбранном типе (double) нижнюю грань в предположениях, что машинная арифметика - двоичная, а операция домножения на константу с плавающей точкой 0.5 выполняется с абсолютной точностью, что, кстати, на ряде платформ неверно. 2. если человек, который задал этот вопрос, будет пользоваться Вашим решением, не разобравшись, и заменять значение нижней гранью, рано или поздно он наткнется на ситуацию, в которой это не сработает, а это уже просто подстава. Если уж беретесь объяснять на публичном форуме, объясняйте как следует.
|
13.11.2003 15:52 Дата регистрации: 21 год назад Посты: 278 | машинная арифметика - двоичная Круто, я думал она троичная. Я просто встречал таких людей как ХХХ, которые считали что они круче всех. И готовы спорить по любому поводу. Один такой человек спорил о машинах( не имея прав), утверждал, что Access крутая БД, т.к. поддерживает связи бесконечность в бесконечность. Может стоило сюда скинуть исходик, который не зависит от платформы, считает маш. точ. абсолютно точно... ... и занимает экранов 10. P.S. понты кидать надо в туалете, чтобы других не нервировать
|
13.11.2003 22:04 Дата регистрации: 21 год назад Посты: 78 | Всему свое время Цитата
ПОЧЕМУ такое решение работает и В КАКИХ СЛУЧАЯХ оно будет верным, а не подсовывали бы Богачевский цикл - типа "вот тебе решение в зубы, не грузись".
Если студент задает такие вопросы в форуме (да не обиться на меня Vlasov A.), то человек весьма далек от программирования и мало чего в нем понимает. И он хочет хоть в чем-то разобраться. (Извините если кого обидел - я не со зла) Готового решения ему никто не дал (еще много слов написать надо :-)). Если он разберется с тем, что ему предложил Lucifer, с простым и вполне достаточным _на этот момент_ решением, до и сам поймет в чем неточность (если у него хоть одна извилина мехматянина присутсвует). А если ему выдать в качестве решения идеально правильную кросплатформенную прогу на много страниц кода, то у него и желание отпадет к компу подходить и пытаться самому прогать что-либо. Если бы мне такое на 1 курсе показали я бы точно ничего не понял. А про неточность метода Lucifer`а догадался сам без всяких подсказок. Ты попробуй еще первокласнику объяснить что 2+2=4 не потому, что так просто есть и все, а потому, что это мы на поле (не забудь объяснить что это) вещественных чисел так ввели операцию сложения. Что, он сразу все поймет и генеем станет?
|
14.11.2003 12:19 F1 | о гениях Что же, "гением" он не станет; а что, чтобы написать упоминавшийся "многостраничный код" (его, кстати, видел кто-нибудь? :-) ), надо быть гением? Не боги горшки обжигают, далеко не боги. ;-) Просто не думаю, что у Lucifer'а отвалился бы язык дописать к своему решению хотя бы несколько слов (приводить многостраничный код ему никто не предлагал, а вот хотя бы пояснить, почему и когда работает этот, следовало бы именно потому, что, судя по вопросу, человек еще не "въехал" в программирование); по меньшей мере затраты энергии на сотрясение воздуха были бы значительно меньше, чем получились в итоге. Но, похоже (и по другим его сообщениям такое же впечатление остается), он считает, что то, что он написал в постскриптуме к своему сообщению о двоичности машинной арифметики, относится ко всем, кроме него. Интересно, он всегда был таким, или же это основное, чему он научился у Богачева? Помимо двоичности машинной арифметики, конечно. :-)
|
14.11.2003 12:49 Дата регистрации: 21 год назад Посты: 278 | Щас буду матерится Я дал решение которое принимают. Большего не надо. По крайне мере, когда мне надо было решить задачу по функану, цель была стать зачет, а не разобратся. P.S. вот Диззи, которого ты защищаешь. Написал много чего, но код правильный с его точки зрения не написал. Это было желание выпендрится или помочь Власову? Как ты думаешь?
|
14.11.2003 14:26 F1 | да успокойся, зачем же материться? :-) Цитата
Я дал решение которое принимают. Большего не надо. По крайне мере, когда мне надо было решить задачу по функану, цель была стать зачет, а не разобратся.
Вот поэтому-то я и считаю, что ты поступил не совсем хорошо. Во-первых, может, человек спрашивает не только для того, чтобы задачу спихнуть, а и разобраться хочет? Это когда такой вопрос в конце первого курса задается, уже бесполезно что-либо пояснять, а когда в начале - что ж такого, думаю, ни ты, ни я не родились со знанием того, как считать машинную точность. Во-вторых, все-таки форум другие люди читают и, возможно, даже через несколько лет кто-нибудь будет искать ответ на такой же вопрос. Так что замечанием Диззи считаю правильным по сути, хотя и выражено оно было в форме наезда. Впрочем, ты ему таким же наездом ответил, и понеслась. Что до меня, я твой ответ на вопрос Власова заметил сразу, про себя отметил, что то, что ты написал, не совсем точно по ряду причин, большинство которых уже изложено, но счел эти причины несущественными (в конце концов думаю, что всем, включая DiZzy, очевидно, что для 98-99% задач, которые придется решать на мехмате, этого достаточно, а для оставшихся 1-2% твой фрагмент запросто можно слегка поменять, если понимать, что, собственно, происходит). Но ты ответил встречным наездом в таком духе, как будто правильно только так и никак иначе; поэтому я и вмешался. Цитата
P.S. вот Диззи, которого ты защищаешь. Написал много чего, но код правильный с его точки зрения не написал. Это было желание выпендрится или помочь Власову? Как ты думаешь?
Может, и выпендриться хотел, я его не знаю. Мне без разницы, если честно, почти все выпендриваются в той или иной степени. То, что он не сформулировал конкретных претензий - плохо.
|
14.11.2003 14:31 F1 | поправка Когда я написал, что DiZzy ответили наездом, я в бОльшей степени имел в виду SPerec, чем тебя; на замечание которого я, собственно, и ответил "да ничего подобного".
|
14.11.2003 15:16 stdout | IEEE 754 Сейчас почти все машины считают числа с плавающей запятой по стандарту IEEE 754, который говорит следующее. Число обычно представляется в виде (-1)^s*(1,мантисса)*2^экспонента. На хранение s (знака) выделяется 1 бит (еще бы). Для 64-битных doubl'ов под мантиссу выделяется 52 бита, под экспоненту - 11. Для 32-битных float'ов - 23 и 8. Если определить машинное eps как минимальное машинное число, большее 1, но отличное от него, минус 1, то получится 2 в (-52)-ой.
|
14.11.2003 15:24 Дата регистрации: 21 год назад Посты: 278 | Абсолютно точная маш. точность Мне кажется что мантисса у машинной точность имеет вид 1111111111
|
14.11.2003 15:54 F1 | ты не заметил stdout переопределил машинную точность как наименьшее число, для которого 1+EPS отличается от 1, так что по его определению все правильно.
|
14.11.2003 16:11 Дата регистрации: 21 год назад Посты: 278 | Сорри Согласен, переопределил. Тогда она равна 2^{-n}. Как найти n расписал IEEE 754
|
14.11.2003 17:48 F1 | float.h :-) Кстати, в стандартном header'е float.h есть #define'ы: FLT_EPSILON DBL_EPSILON LDBL_EPSILON Они там, правда, определены как SMALLEST X WHERE 1+X != 1. Т.е. чтобы получить результат "по Богачеву-Lucifer'у" :-), константу надо поделить пополам, чтобы получить "значение по определению" - вычесть из константы ее квадрат, если я не ошибся. :-)
|
25.11.2003 20:08 Дата регистрации: 20 лет назад Посты: 6 | Опять гнусные наезды... Я могу и код на две страницы сюда закинуть. С этим-то проблем нет. 8) Было желание указать на недочеты в приведенном решении так, чтобы человек понял, что на мой взгляд это серьезные ошибки в _анализе_ самой задачи. А что до выпендрежа - судя по реакции окружающих, я им занимаюсь постоянно. 8)
|