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

Как представляются двойники при записи в текстовые файлы?

Когда вы записываете несколько двойников в файл, в каком формате они сохраняются? Это в байтовом формате или в строковом формате?

Например. дано 0,00083231. Хранится ли он в 10 байтах, где каждый байт представляет одну цифру? Или он хранится только как 8 байт, так как размер двойника 8 байт?

Предположим, что используется язык C++.

26.02.2015

  • Это зависит от того, какой метод вы использовали для его написания. 26.02.2015
  • Это может быть как одно из них, так и что-то совсем другое. Все зависит от того, как вы записываете это в файл. 26.02.2015
  • Формат может быть буквально любым. Вы спрашиваете о каком-то конкретном случае? 26.02.2015
  • ваш вопрос не имеет смысла. При записи в текстовый файл двойники имеют формат, в котором вы говорите, что они есть. Я думаю, вы спрашиваете о том, как они записываются в двоичный файл. В этом случае это обычный дамп памяти двойника. 26.02.2015
  • Попробуйте и посмотрите, это не всегда лучший совет, потому что иногда вы пробуете что-то на одной машине, а на другой оно будет другим... это может зависеть от платформы, зависит от компилятора и т. д. Но в этом случае попробовать и показать, что вы пытались, было бы хорошим исследованием для уточнения вопроса. (всегда ли так... гарантировано? что, если бы я хотел, чтобы было по-другому? и т. д.) 26.02.2015
  • было бы лучше, если бы вы показали нам код, который вы используете для записи двойника в файл 26.02.2015
  • Вы имеете в виду прямую запись как двойную в любом формате экспоненты, величины, который ваш компилятор использует для выполнения операций, или вы указали строку или BCD в своем выводе? 26.02.2015
  • Вы можете сделать все, что вы задумали! 26.02.2015

Ответы:


1

Если вы решите написать текст, например. с форматированным выводом, например file << x, вы получите текст.

Если вы решите писать байты, например. с неформатированным выводом, таким как file.write(&x, sizeof x), вы получаете байты.

26.02.2015

2

Это зависит от того, как вы печатаете значение

Если вы напечатаете число как двоичное значение, оно займет sizeof(double) байт (что не всегда равно 8) в файле, и вы не сможете прочитать значение с помощью обычного средства просмотра/редактора текста. Вы должны использовать двоичный/шестнадцатеричный редактор, чтобы увидеть его в двоичном формате.

Если вы печатаете число с помощью функции вывода текста, результат зависит от того, как вы его отформатируете. Если вы используете cout или функции семейства std::printf в формате %f, значение будет напечатано с использованием 6 значащих цифр, поэтому в текстовом формате оно займет максимум 8 байт. Если вы используете другой спецификатор длины/ширины (например, printf("%9.10f\n", 0.00083231)), то, конечно, реальные напечатанные байты будут другими. Использование другого формата также приведет к другим выводам печатной формы. Например, %e выведет строку в научном формате, который 8.323100e-04 в вашем случае и занимать не менее 12 байт в выходной строке. %a выведет значение в шестнадцатеричной форме, которая будет еще длиннее, за исключением значений, которые точно представляются в двоичном формате. См. живой пример здесь

26.02.2015

3

Вопрос:

Когда вы записываете несколько двойников в файл, в каком формате они сохраняются? Это в байтовом формате или в строковом формате?

Это зависит от того, какие функции вы используете для записи чисел.

E.g.:

Если вы используете fprintf или printf, число будет записано в текстовом виде, которое в вашем примере будет записано как 0.000832 с форматом "%lf" и займет 8 байт. Вы можете изменить формат, чтобы изменить количество байтов, используемых для записи числа. Результирующий вывод будет в удобочитаемой форме. То же самое, если вы используете cout << number;.

Если вы используете fwrite, число будет записано в двоичной форме. Количество байтов, необходимых для хранения числа, всегда будет sizeof(double) независимо от значения числа. Полученный результат не будет удобочитаемым для человека. То же самое, если вы используете ostream::write.

26.02.2015
  • по умолчанию напечатанное значение равно 0.000832 с 6 знаками после запятой, что занимает 8 байт. 26.02.2015

  • 4

    Это зависит от того, как вы их пишете. Вы можете использовать std::ostream и его (перегруженный) operator <<; затем они сохраняются в текстовом виде. Вы можете использовать двоичный ввод-вывод, например. std::ostream::write или fwrite, то они сохраняются в машинная двоичная форма.

    Вероятно, вам следует больше узнать о сериализации и рассмотреть возможность использования текстовых форматов, таких как JSON (например, с помощью jsoncpp). Вас может заинтересовать двоичная сериализация, например. libs11n или XDR

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

    Читайте также о постоянстве, базы данных, контрольные точки приложения, порядок байтов. См. также это.

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

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

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

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

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

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

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

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