Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2020, 13:32   #11
Artem Karavaev
Новичок
Джуниор
 
Регистрация: 14.09.2020
Сообщений: 9
По умолчанию

Выше я объяснил, что для меня является критерием того, что человеку первая часть курса не нужна, она для совсем новичков. Теперь отвечу на это справедливое замечание:

Цитата:
Сообщение от MihalNik Посмотреть сообщение
В том-то и дело, что редко кому надо это представление - программисты просто берут числа достаточной точности и диапазона.
А так вообще кроме таблицы и формулы ничего не надо. В учебниках по ассемблеру все разжевано.
Совершенно верно. Тем не менее, есть люди, которым нужно более глубокое знание темы. Например, разработчики математических библиотек. Вот, скажем, вы знаете, что функция exp2f в разных компиляторах C++ может выдавать разный ответ? Например VC++ обрабатывает неверно почти 1% всех возможных аргументов и выдаёт ответ с ошибкой. В каких учебниках это написано?

Я сейчас пишут статью на Хабр по этой теме, там же объясню, почему на сегодня отсутствует принципиальная возможность считать подобные функции точно для больших типов данных. Статья будет бесплатной, конечно

Последний раз редактировалось Artem Karavaev; 14.09.2020 в 13:36.
Artem Karavaev вне форума Ответить с цитированием
Старый 14.09.2020, 13:52   #12
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Цитата:
Сообщение от Artem Karavaev Посмотреть сообщение
Тем кто предлагает платное размещение рекламы. Да, я знаю о такой возможности, спасибо.
Так это наиболее эффективный способ, всегда на виду. А тема, если её раньше не снесет в корзину админ, уйдет в небытиё. Или её нужно будет периодически апать..

P. S.
Главное ссылку на курс в теме не размещайте, иначе точно тема улетит в корзину. Т. к. реклама на этом ресурсе платная.
I am not a wizard, I am just learning.

Последний раз редактировалось Desc; 14.09.2020 в 13:56. Причина: Добавил P. S.
Desc вне форума Ответить с цитированием
Старый 14.09.2020, 13:56   #13
Artem Karavaev
Новичок
Джуниор
 
Регистрация: 14.09.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
Так это наиболее эффективный способ, всегда на виду. А тема, если её раньше не снесет в корзину админ, уйдет в небытиё. Или её нужно будет периодически апать..
Я не могу согласиться. Баннеры - это на мой взгляд один из самых плохих способов рекламы. Я давал платную рекламу в тех социальных сетях, где есть некоторая гарантия, что определённое количество человек действительно перейдут по ссылке. Это первое.

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

Цитата:
Главное ссылку на курс в теме не размещайте, иначе точно тема улетит в корзину. Т. к. реклама на этом ресурсе платная.
Ни в коем случае! Я уже понял, что бесплатно нельзя и остался только чтобы пообщаться. Мне важно знать мнение разных людей, может быть это поможет мне лучше понять что следует изложить в других частях курса, которые я готовлю. Первая - она же пробная, чтобы обратную связь собрать и обучить самых новичков.

Последний раз редактировалось Artem Karavaev; 14.09.2020 в 14:06. Причина: Добавил ответ на PS
Artem Karavaev вне форума Ответить с цитированием
Старый 14.09.2020, 14:02   #14
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
Сообщение от Artem Karavaev Посмотреть сообщение
Например, разработчики математических библиотек. Вот, скажем, вы знаете, что функция exp2f в разных компиляторах C++ может выдавать разный ответ? Например VC++ обрабатывает неверно почти 1% всех возможных аргументов и выдаёт ответ с ошибкой.
И что с того? И да, там, наверное, не с ошибкой, а с некоторой погрешностью. Или прямо исключение выбрасывается?)

Цитата:
Сообщение от Artem Karavaev Посмотреть сообщение
Например, разработчики математических библиотек.
Язык С никогда и не предназначался для математических библиотек, с самого начала там был Фортран
Пришли люди и, сказав: "на фиг нам вся эта математика?", написали сами себе язык, немного автоматизировав ассемблер.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 14.09.2020 в 14:06.
MihalNik вне форума Ответить с цитированием
Старый 14.09.2020, 14:10   #15
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,501
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Ищу работу: резюме, портфолио, отзывы
Да можно тут, вот ссылка. https://programmersforum.ru/forumdisplay.php?f=108

главное потом мне не писать через 5-10 лет, что нужно удалить телефон, е-майл и прочие контакты из вашей темы, эта услуга платная )
Alar вне форума Ответить с цитированием
Старый 14.09.2020, 14:17   #16
Artem Karavaev
Новичок
Джуниор
 
Регистрация: 14.09.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от MihalNik Посмотреть сообщение
И что с того? И да, там, наверное, не с ошибкой, а с некоторой погрешностью. Или прямо исключение выбрасывается?)
Нет, там ошибка в последнем бите ответа (ошибка и погрешность в данном случае синонимы). Согласен, что почти для 100% программистов это не важно, однако, по крайней мере, на западе есть целое научное направление, посвящённое этой проблеме. Цель направления - создать библиотеки, которые будут корректно округлять функции до последнего значащего бита. Думаю, важность этой задачи для разных людей разная. Для вас не важно, для меня важно, когда заказчик (научный коллектив) требует чтобы последний бит был точным.

Цитата:
Язык С никогда и не предназначался для математических библиотек, с самого начала там был Фортран
Пришли люди и, сказав: "на фиг нам вся эта математика?", написали сами себе язык, немного автоматизировав ассемблер.
Дело не в языке. Описываемая проблема характерна для 100% языков программирования и всех возможных компиляторов к ним. Почему я в этом уверен? Потому что это проблема не языков, это одна из фундаментальных научных проблем - рассчитать трансцендентную функцию точно до последнего значащего бита. Решения на сегодня нет, есть несколько костылей. Актуальность проблемы возросла последнее время из-за более активного использования типа данных с плавающей запятой учетверённой точности (128 битов). Там вообще непонятно что делать... вообще беда

Если для вас это не нужно, то это прекрасно, я искренне рад, что вас это не коснётся. Тем не менее, для общего развития некоторым программистам (НЕКОТОРЫМ, не всем), нужно знать о том, что это за гадость и как она появляется.
Artem Karavaev вне форума Ответить с цитированием
Старый 14.09.2020, 15:11   #17
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,657
По умолчанию

Цитата:
Сообщение от Artem Karavaev Посмотреть сообщение
Нет, там ошибка в последнем бите ответа (ошибка и погрешность в данном случае синонимы). Согласен, что почти для 100% программистов это не важно, однако, по крайней мере, на западе есть целое научное направление, посвящённое этой проблеме. Цель направления - создать библиотеки, которые будут корректно округлять функции до последнего значащего бита. Думаю, важность этой задачи для разных людей разная. Для вас не важно, для меня важно, когда заказчик (научный коллектив) требует чтобы последний бит был точным.


Дело не в языке. Описываемая проблема характерна для 100% языков программирования и всех возможных компиляторов к ним. Почему я в этом уверен? Потому что это проблема не языков, это одна из фундаментальных научных проблем - рассчитать трансцендентную функцию точно до последнего значащего бита. Решения на сегодня нет, есть несколько костылей. Актуальность проблемы возросла последнее время из-за более активного использования типа данных с плавающей запятой учетверённой точности (128 битов). Там вообще непонятно что делать... вообще беда

Если для вас это не нужно, то это прекрасно, я искренне рад, что вас это не коснётся. Тем не менее, для общего развития некоторым программистам (НЕКОТОРЫМ, не всем), нужно знать о том, что это за гадость и как она появляется.
Сама постановка задачи уже имеет проблемы с логикой. Любая задача решается с заданной математической точностью, а уже потом под нее выбирается представление чисел. А не наоборот.
Так вот, будет заказчику мало 64 бит, а 128 - сильно много. А вычисление этих лишних бит требует машинного времени, ну и хранение - памяти.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 14.09.2020 в 15:16.
MihalNik вне форума Ответить с цитированием
Старый 14.09.2020, 15:37   #18
Artem Karavaev
Новичок
Джуниор
 
Регистрация: 14.09.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от MihalNik Посмотреть сообщение
Сама постановка задачи уже имеет проблемы с логикой. Любая задача решается с заданной математической точностью, а уже потом под нее выбирается представление чисел. А не наоборот.
Так вот, будет заказчику мало 64 бит, а 128 - сильно много. А вычисление этих лишних бит требует машинного времени, ну и хранение - памяти.
Вы не правы, потому что, вероятно, не знакомы с этим научным направлением. Представьте, что вам нужно чтобы все 23 бита дробной части мантиссы были точными для типа данных float. То есть чтобы округление до 23-х битов было таким же, как если бы у нас было в распоряжении бесконечное число битов. Например,

Код:
float x = 0.00296957581304013729095458984375f.
float z = exp2f(x);
Если бы у нас был калькулятор с бесконечной точностью, мы получили бы ответ
Код:
1,0020604729652405753669743044108123031635398201893943954577320057
В двоичной системе счисления это будет

Код:
1,000000001000011100001001000000000000000000000000000001101111101
-------------------------^
Надеюсь, видно, первые 23 бита дробной части - это то, что должно получиться в типе данных float. Однако мы видим, что 24-й бит равен 1, а за ним идут 29 нулей. 24+29 = 53, и нам нужен ещё один бит для того, чтобы паровоз из нулей закончился. Если вы знакомы с правилом округления в арифметике с плавающей запятой, то знаете, что только по достижению 54-го бита мы можем точно сказать, в какую сторону произойдёт округление в 23-м бите. Хотя, казалось бы, нам нужно всего 23 бита дробной части мантиссы. Вот в этом и проблема! Нужно 23 бита в ответе, а считать нужно до 54-х! А бывает ещё хуже, когда нужно 52 бида для double, а считать приходится до 120.

Для иллюстрации проблемы привожу код неверного расчёта функции 2**x (хотя в каких-то компиляторах будет работать правильно):

Код:
#include <stdio.h>
#include <cmath>

int main() {
	float x = 0.00296957581304013729095458984375f;
	float z;
	z = exp2f(x);	
	printf ("%.8f (in hex 0x%X)\n", z, *(unsigned int*)&z);
	z = powf(2.0f, x);
	printf ("%.8f (in hex 0x%X)\n", z, *(unsigned int*)&z);
  return 0;
}
Будет выведено два разных числа, хотя по идее считается одно и то же. В данном случае функция exp2f отработала правильно, но есть более миллиона тестов, где она тоже ошибается в последнем бите.

Ошибки в логике при постановки задачи здесь нет. Задача ставится так: выдать округлённое значение трансцендентной функции f(x) для заданного режима округления и для заданного формата с плавающей запятой так, как если бы округление производилось на основе бесконечного количества битов. Для всех x из некоторого заданного диапазона. Этим занимаются целые научные сообщества, а вы говорите, "ребята, у вас ошибка в логике постановки задачи". Дай Бог, если бы так было... но увы.

Если вы говорите, что любая задача решается с заданной математической точностью, то не понимаете суть проблемы. Здесь проблема в том, что мы не знаем КАКОВА должна быть точность. Потому что понятие ТОЧНОСТЬ и понятие ЧИСЛО ПРАВИЛЬНЫХ БИТОВ - это РАЗНЫЕ вещи. Например, число 2,000000 и число 1,999999 отличаются всего лишь на одну миллионную, однако у них не совпадает ни один знак после запятой. А задача, которую описал ещё сложнее, найти не только правильными 23 (или 52) бита ответа, но и понять до какого бита при этом нужно досчитать, чтобы наши 23 (или 52) бита мантиссы совпали с бесконечно-точным ответом после его корректного округления по Стандарту. И печаль в том, что приходится выходить за сотни битов иногда.

В каком учебнике по ассемблеру это описано? Надеюсь, я скоро допишу об этом статью на Хабре. Если разрешат, потом дам ссылку. Там подробнее будет. Короче, не всё есть в учебниках. Вернее, не для всех это "всё", есть ситуации, когда нужно знать гораздо больше, а иногда и производить новые знания.

Последний раз редактировалось Artem Karavaev; 14.09.2020 в 15:43.
Artem Karavaev вне форума Ответить с цитированием
Старый 14.09.2020, 16:29   #19
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от Artem Karavaev Посмотреть сообщение
дано это далеко не всем, по опыту работы в вузе могу сказать, что как раз это редко кто так может.
Так с этого и надо было начинать.

В ВУЗе (не хочу обидеть действительно хороших и добросовестных студентов) очень много людей, которым это (и не только это) скорее даже просто не нужно. От слова "совсем". Они пришли туда с другой целью. А, те, кому нужно, сами дополнительно погрузятся в эту область, если знаний из учебной программы не хватит.

Цитата:
Сообщение от Artem Karavaev Посмотреть сообщение
Для вас не важно, для меня важно, когда заказчик (научный коллектив) требует чтобы последний бит был точным.
Опять же не хочу никого обидеть. Просто одно только непонятно. Ваше "научное" сообщество и Вы сами в курсе, что такое машинное эпсилон?
Streletz вне форума Ответить с цитированием
Старый 14.09.2020, 17:41   #20
Artem Karavaev
Новичок
Джуниор
 
Регистрация: 14.09.2020
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Опять же не хочу никого обидеть. Просто одно только непонятно. Ваше "научное" сообщество и Вы сами в курсе, что такое машинное эпсилон?
Конечно в курсе

Подробнее о той проблеме, что я описал постом выше, вы можете почитать у отца основателя IEEE-754 Уильяма Кэхэана. A Logarithm Too Clever by Half. Эта проблема называется Table Maker's Dilemma и к машинному нулю отношение имеет не прямое.

Вы могли бы по отношению к этому выдающемуся человеку применить эпитет "учёный" (именно так в кавычках) и потом уточнить, что не хотели никого обидеть? И заодно спросить, в курсе ли он что такое машинный ноль

Последний раз редактировалось Artem Karavaev; 14.09.2020 в 17:43.
Artem Karavaev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мониторинг БД с сайта у удаленных компьютеров. Топикстартеру нужно по серому ip подключиться к домашнему компу, где лежит база. Saigla SQL, базы данных 3 13.09.2020 05:25
Срочно!!!Помогите с условным оператором, учусь на первом курсе спо, не могу сообразить, как нужно сделать задачку! Jhon_Smith Помощь студентам 0 18.10.2013 22:36
Форум на своём сайте leonidsm Помощь студентам 1 10.04.2012 17:06
На каких сайтах, форумах, можно рассказать о своём сайте? maxam4 Свободное общение 2 25.03.2010 11:14
У кого в учебном заведении был предмет системное программирование EvoVII Помощь студентам 12 23.03.2009 15:09