маленькие целые числа в фортране

Мне нужно создать большой массив целых чисел в фортране, который содержит только 1 и -1. Может ли кто-нибудь предложить мне, как определить такой массив, который занимает минимально возможное пространство памяти?

Спасибо


person user3382401    schedule 21.03.2014    source источник
comment
Является ли минимизация объема памяти единственной целью? Или решение также должно быть эффективным?   -  person mgilson    schedule 21.03.2014
comment
минимизация памяти является основной целью. Числа 1 и -1, хранящиеся в массиве, позже умножаются на другие переменные, и я не думаю, что умножение в любом случае можно оптимизировать, уменьшив размер массива, определяющего знак.   -  person user3382401    schedule 21.03.2014
comment
Насколько велик ваш массив?   -  person Kyle Kanos    schedule 21.03.2014
comment
Скажем, несколько сотен МБ на диске. Поскольку у меня есть и другие переменные, все, что я сохраняю в рассматриваемом целочисленном массиве, оставляет мне дополнительное пространство для других.   -  person user3382401    schedule 21.03.2014


Ответы (2)


Простой подход:

use ISO_FORTRAN_ENV

integer (INT8), dimension (N) :: array

Это даст вам целые числа размером в байт. (Если компилятор на самом деле не решит реализовать их с большими целыми числами, что кажется неправдоподобным, но, вероятно, разрешено.)

Если массив действительно огромен и не помещается в хранилище, вы можете получить доступ к битам внутри переменных, но это не будет простым массивом.

person M. S. B.    schedule 21.03.2014

Если вы преобразуете все свои -1 в 0, вам понадобится только один бит на член вашего массива. Имея такой преобразованный массив, который содержит только 1 и 0, несложно упаковать его в 32-битные или любые целые числа любого размера.

person Glenn Randers-Pehrson    schedule 21.03.2014
comment
Я согласен. Но я искал способ (если возможно, с синтаксисом) определить массив целых чисел, по одному биту на запись. - person user3382401; 21.03.2014
comment
Мой опыт был в основном с Fortran IV, и у него такого не было. Но это была простая операция сдвига и маски для сохранения и извлечения 1-битных целых чисел из 60-битного слова. - person Glenn Randers-Pehrson; 21.03.2014
comment
В Fortran есть множество подпрограмм для работы с битами. Но без битовых массивов. - person Vladimir F; 22.03.2014