На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Зачем эти "странные" библиотечные мат. функции , С89 + С99
    Всем хай!

    Вопрос больше из любопытства.

    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

    Я понимаю, что они добавлены не для ради забавы, а все имеют очень строгое обоснование и громадную функциональность в реальных приложениях. Или все-таки нет?)

    спс. за внимание
      Здесь вы тоже сможете получить не более чем догадки. Для более точно информации вам стоит обратиться к разработчикам, которые добавляли эти функции в стандарт С++.
        Цитата FasterHarder @
        Я понимаю, что они добавлены не для ради забавы, а все имеют очень строгое обоснование и громадную функциональность в реальных приложениях. Или все-таки нет?)
        Почти да. Смотря, что называть функциональностью. Для значений, близких к 0, ex будет очень близка к 1, следовательно количество значащих бит после запятой будет крайне малым из-за единицы в целой части. То же для обратной операции логарифмирования. Команды (x86 FPU) F2XM1 и FYL2XP1 учитывают этот нюанс и возвращают точное (в разумных рамках ширины мантиссы, конечно) значение, чего нельзя было бы добиться без этого ±1, но у них и очень малый допустимый диапазон аргумента. (Впрочем, FYL2X тоже есть, и у неё нет особых ограничений на диапазон.) Функции expm1() и log1p() теоретически также должны учитывать этот нюанс, но вот учитывают ли, я утверждать не берусь. Однозначно, что их наличие упрощает перенос оптимизированных под точность асмовых приложений на C.
        cbrt() умеет отрицательные аргументы. Ну и формально более точна, т.к. ⅓ для pow() не может быть точно представлена в форматах плавающей точки.
        fma() является важной частью матричных (и не только) вычислений и часто бывает реализована отдельной инструкцией процессору, обычно DSP, но не только. Даже в вариантах ядер ARM и PowerPC они есть. Она не только ускоряет вычисления, но и гарантирует одно округление вместо двух.
        Как-то так...
          Цитата FasterHarder @
          Вопрос больше из любопытства.

          Из любопытства вставляем FMA в строку поиска ya.ru
          Обнаруживаем ссылки:
          N1
          N2
            офигеть)
            Qraizer, ты просто титан ( нет, даже апгрейд-титан - один из самых сильных юнитов в HMM2, только black dragon может с ним спорить иногда )) ) в Си.

            в общем все эти функции так или иначе иногда оказываются критически важными при кодировании на Си, понятно. Но мне это не грозит в обозримом будущем.

            ладно, спс, в очередной раз я осознал, что ни хрена не знаю по факту)
              Цитата FasterHarder @
              ты просто титан ( нет, даже апгрейд-титан - один из самых сильных юнитов в HMM2, только black dragon может с ним спорить иногда )) ) в Си.

              Да уж!
              Я, например, сходу не догадался. Хотя вроде как немного того - математик!
              А ведь бытует мнение на многих популярных форумах, что настоящему IT-шнику вообще и программисту в частности высшее образование не нужно. От слова совсем!

              Ну а теперь по делу.
              Меня вот неприятно удивил тот факт, что в классическом C/C++ нет готовых функций генерации псевдослучайных чисел типа double или int в заданных диапазонах.
              Есть только функция rand(), генерирующая псевдослучайные целые числа в диапазоне от 0 до RAND_MAX - 1. А все остальное - дописывай сам!
              Сообщение отредактировано: mkudritsky -
                Цитата mkudritsky @
                классическом C/C++ нет готовых функций генерации псевдослучайных чисел типа double или int в заданных диапазонах.

                а что насчет default_random_engine + uniform_real_distribution

                не факт, что ты об этом говорил, просто вспомнилось, что в С++ больше средств для генерации чисел, чем в Си...
                  Цитата mkudritsky @
                  А ведь бытует мнение на многих популярных форумах, что настоящему IT-шнику вообще и программисту в частности высшее образование не нужно. От слова совсем!
                  Ну у меня его и нет :D
                  Цитата mkudritsky @
                  Меня вот неприятно удивил тот факт, что в классическом C/C++ нет готовых функций генерации псевдослучайных чисел типа double или int в заданных диапазонах.
                  Есть только функция rand(), генерирующая псевдослучайные целые числа в диапазоне от 0 до RAND_MAX - 1. А все остальное - дописывай сам!
                  В C да, а вот в C++ давно уже есть <random>, где на любой вкус.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0277 ]   [ 17 queries used ]   [ Generated: 10.12.22, 05:22 GMT ]