Nano Hash - криптовалюты, майнинг, программирование

Форматирование набора значений NSDecimalNumber

Я работаю над приложением, в котором мне нужно взять несколько наборов числовых значений (в настоящее время хранящихся как NSDecimalNumber) и отобразить их в столбцах. Каждый набор будет иметь примерно одинаковую величину, но величина каждого набора может измениться, и я не буду знать заранее, что это такое. Таким образом, одним значением может быть (1.23, 2.3, 1.567), а другим (1234.1, 2345, 1999.4).

Чтобы выровнять столбцы и узнать, сколько места мне понадобится, я бы хотел выяснить для каждого набора чисел ширину нужного мне формата. Другими словами, максимальное количество разрядов целого числа и максимальное количество разрядов дробной части. Для приведенных выше примеров: 1 и 3 в первом случае, 4 и 1 во втором.

Теперь _ 2_ ответит на этот вопрос напрямую, объединив длину мантиссы и значение показателя степени. Проблема в том, что поля этой структуры являются явно частными, и, похоже, не существует какого-либо API для получения из них значений мантиссы и экспоненты.

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

Я довольно отрывочен в своей математике на C, но я предполагаю, что есть какой-то способ получить эту информацию, преобразовав мою десятичную дробь в double, а затем изучив это (либо стандартные библиотечные функции, либо выковыривая биты) и сделав несколько журналов . Я не знаю, как именно, и должен ли я беспокоиться о преобразовании в представление с потерями.

Есть ли более прямой и / или более эффективный способ получения этой информации?


Ответы:


1

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

20.11.2012
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..