Конвертировать Double в Single без потери точности в MATLAB - PullRequest
0 голосов
/ 22 декабря 2010

Я не думаю, что это возможно, поэтому я решил попросить здесь посмотреть, как поиск в Google не дал никаких результатов, которые намекают на то, что я могу это сделать.

Особенно после прочтения этого:

Можно ли использовать двойные числа для представления 64-битного числа без потери точности

Хотя мои числа можно хранить в32 бита, как показано в примере ниже.

Но есть ли способ в MATLAB преобразовать значение с двойной точностью в единичное без потери информации?

, например, в MATLAB

> a = 103364148
a =
   103364148
> single(a)
ans =
   103364144

Или, может быть, есть другой способ на другом языке, например, Python?

Я работаю с GPUM, где я могу использовать только GPUSingle, поэтому я пытаюсь найти способ работать с вещами, двойными для MATLABв сингл с GPU.

Спасибо,

Ответы [ 3 ]

4 голосов
/ 22 декабря 2010

Один может содержать целые числа до 2 ^ 24 (16 777 216) без потери точности - для знака и показателя степени требуются некоторые биты.

Другими словами, нет, вы не можете сделать так, чтобы число, большее 2 ^ 24, помещалось в один без ошибок (обратите внимание, что оно может содержать несколько больших чисел, если их можно записать как произведение числа меньшего 2 ^ 24 и некоторой степени 2).

Однако вы уверены, что вам нужна такая точность для ваших расчетов? Пока все ваши целые числа меньше 2 ^ 24, с вами все будет в порядке.

2 голосов
/ 06 мая 2011

Когда вы проводите подобные эксперименты, вы должны включить

format long

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

>> pi     
ans =
    3.1416
>> format long
>> ans
ans =
   3.141592653589793
0 голосов
/ 22 декабря 2010

Если ваше единственное беспокойство - целые числа, вы можете использовать вместо него int32

...