введите один в MATLAB - PullRequest
       3

введите один в MATLAB

3 голосов
/ 25 мая 2011

Что означает этот вызов typecast в MATLAB?

y=typecast(x,'single');

что это значит? Когда я запускаю typecast(3,'single'), это дает 0 2.1250.

Я не понимаю, что это такое.

Я пытаюсь преобразовать это в Java, как я могу это сделать?

Из руководства MATLAB:

Single - Преобразование в одну точность

Синтаксис

B = single(A)

Описание

B = single(A) преобразует матрицу А с одинарной точностью, возвращая, что значение в B. A может быть любым числовым объект (например, двойной). Если А уже одинарная точность, одинарная нет эффекта. Количества одинарной точности требуется меньше памяти, чем количества с двойной точностью, но имеют меньшая точность и меньший диапазон.

Ответы [ 2 ]

4 голосов
/ 25 мая 2011

typecast переинтерпретирует байты, используемые для представления значения одного типа, как если бы те же байты представляли другой тип. Например, константа 3 в MATLAB является значением двойной точности IEEE, то есть для его хранения требуется 8 байтов. Эти восемь байтов в этом случае

40 08 00 00 00 00 00 00

Значение типа single в MATLAB является значением одинарной точности IEEE, то есть для его хранения требуется всего 4 байта. Таким образом, восемь байтов двойного сопоставятся с двумя 4-байтовыми синглами, которые являются

40 08 00 00, and
00 00 00 00

Оказывается, что 40 08 00 00 является представлением значения 2.125 с одинарной точностью, и, как вы можете догадаться, 00 00 00 00 является представлением 0 с одинарной точностью. Я полагаю, что они выходят в обратном порядке из-за порядкового номера машины, и на машине с прямым порядком байтов я думаю, что вместо этого вы получите 2.125 0.

В C ++ это было бы что-то вроде reinterpret_cast. В Java, кажется, не такое прямое отображение, но ответы на этот вопрос переполнения стека обсуждают некоторые альтернативы, такие как сериализация.

1 голос
/ 25 мая 2011

После запуска help typecast похоже, что он изменяет тип данных, но сохраняет назначение битов таким же, в то время как single( ) сохраняет номер таким же, но изменяет расположение битов.

Если я понимаю, вы можете подумать, что у вас есть две коробки, каждая из которых содержит до 8 шаров. Допустим, коробка 1 заполнена, а коробка 2 содержит 3 шара. Теперь мы typecast превратили это в систему, где в коробке находится 4 шара.

Этой системе понадобятся три ящика для хранения наших шаров. Итак, у нас есть коробки 1 и 2, которые заполнены. Коробка 3 содержит 3 шара.

Таким образом, вы бы [8,3] преобразовали в [4,4,3].

В качестве альтернативы, если вы преобразовали число в нашу новую систему таким же образом, как работает single( ) (например, для изменения int8 на single), вы бы изменили количество шаров, а не контейнер .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...