Если вам нужно отследить количество значащих цифр после запятой, ни float
, ни int
не являются правильным способом хранения вашего номера. Вместо этого используйте Decimal
:
from decimal import Decimal
a = Decimal('0.00')
print(str(a))
... испускает точно 0.00
.
Если вы сделаете это, вам, вероятно, следует также прочитать вопрос Значимые цифры в десятичном модуле и соблюдать рекомендации принятого ответа.
Конечно, вы также можете округлить до float или int, а затем переформатировать до нужного количества мест:
a = float('0.00')
print('%.2f' % a) # for compatibility with ancient Python
print('{:.2f}'.format(a)) # for compatibility with modern Python
print(f"{a:.2f}") # for compatibility with *very* modern Python
Почему Вы только не используете так называемое "упакованное" представление данных? Этот подход позволяет Вам помещать все данные, в которых Вы нуждаетесь в массив байтов с одним размером. Например, если необходимо сохранить
struct data
{
int nFiles;
int nNames;
int* files;
int* names;
}
Можно просто хранить эти данные в массиве этот путь:
[struct data (7*4=28 bytes)
[int nFiles=3 (4 bytes)]
[int nNames=2 (4 bytes)]
[file0 (4 bytes)]
[file1 (4 bytes)]
[file2 (4 bytes)]
[name0 (4 bytes)]
[name1 (4 bytes)]
]
Я думаю, что размер постоянной памяти составляет 64 КБ, и вы не можете выделить ее динамически, используя cudaMalloc
. Он должен быть объявлен константой, скажем
__constant__ data mydata[100];
. Точно так же вам не нужно его освобождать. Кроме того, вы не должны передавать ссылку на него через указатель, просто обращайтесь к нему как к глобальной переменной. Я попытался сделать то же самое, и это дало мне segfault (в devicemu).