Как стать автором
Обновить

Комментарии 9

Если {Rmpfr} требуется повсеместно, можно реализовать поддержку {vctrs}, написав десяток функций-прослоек (обычно, довольно тривиальных), после чего этот тип отлично проинтегрируется со всем {tidyverse}-семейством и с пакетами, которые до сих пор на {vctrs} не переехали, но в будущем это сделают.

Добрый день! Очень интересная библиотека, спасибо за статью. Хочу предложить решение этой же задачи, которое основано на предложении в первом абзаце "Метаться в поисках другого инструмента? Тоже вариант". Решение в Wolfram Cloud:


frec[stopval_, n_, x_] := frec[stopval, n, x]= 
    If[n === stopval, 
        (stopval - 1) + stopval/(stopval + 1 + x), 
        (n - 1) + n/(frec[stopval, n+2, x])
    ]

Block[{$RecursionLimit = 4000}, N[frec[2019,1, x]/.x->1, 6000]]
Block[{$RecursionLimit = 4000}, N[frec[2019,1, x]/.x->2, 6000]]

Спасибо за комментарий. Он очень порадовал.
Я сначала хотел написать именно про Wolfram и привести код, потом написал "другие" и стал ждать, напишет ли кто-нибудь в Wolfram/Maple/Mathcad.

Иногда возникает прямо противоположная задача: нужен, например, типа данных single или int8 (для экономии памяти). В numpy эти типы есть. В R надо что-то придумывать.

Тут, наверное, надо в задачу погружаться. Откуда такая проблематика.


  1. В целом аппаратные средства продвинулись неплохо вперед и можно позволить себе иногда не считать биты в угоду скорости решения. Виртуальной машинки 16CPU/128Gb, которая вполне приемлема по цене в enterprise задачах как калькулятор, для многих задач более чем достаточно на этапе исследований.
  2. Экономия по памяти оборачивается потерей скорости. Конвейер CPU оптимизирован на работу с целыми словами (32 или 64 бит, в зависимости от разрядности CPU). Часто скорость исполнения критичней потребляемой памяти.
  3. В продуктиве объемы могут быть существенно больше, которые ни при каком раскладе в память за раз не поместятся, поэтому все равно получаются бэкенды.
  4. В комплексном решении придется использовать внешние платформы, системы и т.д., а у них свои возможности и правила.
  5. В зависимости от задач можно попробовать использовать character, либы для работы с 8-ми битными изображениями, rcpp и пр.

Раньше, в условиях нехватки памяти, развлекались битвой за биты, сжатием в памяти и пр…
Но сейчас, к счастью, нет уже реальных потребностей — железа достаточно и можно фокусироваться на сути задач, времени получения финального результата, времени продуктивного исполнения.

Но single вполне можно было реализовать, т.к. аппаратная поддержка у cpu присутствует, а разница по памяти существенна.

на практике часто все в задачу упирается.


я в ряде задач использую ascii-character. как раз 8 бит. + регулярки по текстовому представлению для определенного класса задач позволяют решать в одну строку вещи, требующие страницу манипуляций в квадратных таблицах.


а еще есть разреженные матрицы. там эта оптимизация 32 -> 8 / 64 -> 8 ни разу не поможет на больших объемах.

Но изначально речь идет вовсе не об экономии памяти, а о вычислении величин, требуемая точность которых выше точности, обеспечиваемой стандартным представлением чисел с плавающей запятой.

Применение MPFR C++ для построения приближённых решений системы Лоренца — пост.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории