Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.207.133.13] |
|
Сообщ.
#1
,
|
|
|
Всем хай!
Вопрос больше из любопытства. 1. функция expm1. все, что она делает в отличие от exp - вычитает еще 1 из результата Вот на хрена она нужна! То есть вместо expm1( 3 ) можно записать exp( 3 ) - 1. В чем прикол этой функции) 2. функция fma. Считает a * b + c. Ахахаха. Ок, давайте введем еще, например, a * b - c * c или ( a + b ) * c - a и таких вариантом миллиард можно придумать. Кстати, в вики про проблему FMA кое-что написано, хм... 3. cbrt, ну, наверное, тоже странная. Можно ведь добавить и ариф. корень 4-ой, 9-ой или 41-й степени. А почему бы и нет. 4. log1p - суть аналог expm1 только для log Я понимаю, что они добавлены не для ради забавы, а все имеют очень строгое обоснование и громадную функциональность в реальных приложениях. Или все-таки нет?) спс. за внимание |
Сообщ.
#2
,
|
|
|
Здесь вы тоже сможете получить не более чем догадки. Для более точно информации вам стоит обратиться к разработчикам, которые добавляли эти функции в стандарт С++.
|
Сообщ.
#3
,
|
|
|
Цитата FasterHarder @ Почти да. Смотря, что называть функциональностью. Для значений, близких к 0, ex будет очень близка к 1, следовательно количество значащих бит после запятой будет крайне малым из-за единицы в целой части. То же для обратной операции логарифмирования. Команды (x86 FPU) F2XM1 и FYL2XP1 учитывают этот нюанс и возвращают точное (в разумных рамках ширины мантиссы, конечно) значение, чего нельзя было бы добиться без этого ±1, но у них и очень малый допустимый диапазон аргумента. (Впрочем, FYL2X тоже есть, и у неё нет особых ограничений на диапазон.) Функции expm1() и log1p() теоретически также должны учитывать этот нюанс, но вот учитывают ли, я утверждать не берусь. Однозначно, что их наличие упрощает перенос оптимизированных под точность асмовых приложений на C.Я понимаю, что они добавлены не для ради забавы, а все имеют очень строгое обоснование и громадную функциональность в реальных приложениях. Или все-таки нет?) cbrt() умеет отрицательные аргументы. Ну и формально более точна, т.к. ⅓ для pow() не может быть точно представлена в форматах плавающей точки. fma() является важной частью матричных (и не только) вычислений и часто бывает реализована отдельной инструкцией процессору, обычно DSP, но не только. Даже в вариантах ядер ARM и PowerPC они есть. Она не только ускоряет вычисления, но и гарантирует одно округление вместо двух. Как-то так... |
Сообщ.
#4
,
|
|
|
Сообщ.
#5
,
|
|
|
офигеть)
Qraizer, ты просто титан ( нет, даже апгрейд-титан - один из самых сильных юнитов в HMM2, только black dragon может с ним спорить иногда )) ) в Си. в общем все эти функции так или иначе иногда оказываются критически важными при кодировании на Си, понятно. Но мне это не грозит в обозримом будущем. ладно, спс, в очередной раз я осознал, что ни хрена не знаю по факту) |
Сообщ.
#6
,
|
|
|
Цитата FasterHarder @ ты просто титан ( нет, даже апгрейд-титан - один из самых сильных юнитов в HMM2, только black dragon может с ним спорить иногда )) ) в Си. Да уж! Я, например, сходу не догадался. Хотя вроде как немного того - математик! А ведь бытует мнение на многих популярных форумах, что настоящему IT-шнику вообще и программисту в частности высшее образование не нужно. От слова совсем! Ну а теперь по делу. Меня вот неприятно удивил тот факт, что в классическом C/C++ нет готовых функций генерации псевдослучайных чисел типа double или int в заданных диапазонах. Есть только функция rand(), генерирующая псевдослучайные целые числа в диапазоне от 0 до RAND_MAX - 1. А все остальное - дописывай сам! |
Сообщ.
#7
,
|
|
|
Цитата mkudritsky @ классическом C/C++ нет готовых функций генерации псевдослучайных чисел типа double или int в заданных диапазонах. а что насчет default_random_engine + uniform_real_distribution не факт, что ты об этом говорил, просто вспомнилось, что в С++ больше средств для генерации чисел, чем в Си... |
Сообщ.
#8
,
|
|
|
Цитата mkudritsky @ Ну у меня его и нет А ведь бытует мнение на многих популярных форумах, что настоящему IT-шнику вообще и программисту в частности высшее образование не нужно. От слова совсем! Цитата mkudritsky @ В C да, а вот в C++ давно уже есть <random>, где на любой вкус. Меня вот неприятно удивил тот факт, что в классическом C/C++ нет готовых функций генерации псевдослучайных чисел типа double или int в заданных диапазонах. Есть только функция rand(), генерирующая псевдослучайные целые числа в диапазоне от 0 до RAND_MAX - 1. А все остальное - дописывай сам! |