2011-05-25 9 views
3

typecastを呼び出すと、MATLABでは何が行われますか?MATLABの単一型へのキャスト

y=typecast(x,'single'); 

これは何を意味しますか?私がtypecast(3,'single')を実行すると、0 2.1250となります。

私はそれが何であるか分かりません。

これをJavaに変換しようとしていますが、どうすればできますか? MATLABマニュアルから

単一 - 単精度に

換算構文

B = single(A) 

説明

B = single(A)はそれを返す、単精度にA 行列を変換 B.の値A任意の数値の オブジェクト(doubleなど)です。 Aが の単精度である場合、単精度は となります。単精度数量 は、倍精度数量が より少なくて済みますが、精度が低く、範囲が狭い場合は になります。

答えて

4

typecastは、1つのタイプの値を表現するために使用されるバイトを、同じタイプのバイトを表すように再解釈します。たとえば、MATLABの定数3はIEEEの倍精度値です。つまり、それを格納するのに8バイト必要です。この場合、これらの8つのバイトは

40 08 00 00 00 00 00 00 

MATLABにおけるタイプsingleの値はそれを保存するためにのみ4バイトをとる意味、IEEE単精度値です。だから、二重の8つのバイトは

40 08 00 00, and 
00 00 00 00 

されたものそれは40 08 00 00は値2.125の単精度表現であることが判明し、お察しの通り、00 00 00 00は、2つの4バイトのシングルにマップされます単精度表現の0です。私は彼らがマシンのエンディアンのために逆の順序で出てくると信じています。ビッグエンディアンのマシンでは2.125 0を代わりに使うと思います。

C++では、これはreinterpret_castのようなものです。 Javaでは、直接的なマッピングはないようですが、this Stack Overflow questionへの回答では、シリアライゼーションのようないくつかの選択肢について議論しています。

+0

あなたの説明は私のものよりもかなり良かった:) Upvoted! – n00dle

+0

grazie Mille!............................................ – Inv3r53

1

help typecastを実行しているから、それはデータ型を変更するように見えるが、single()は同じ番号を保持しますが、ビット配置を変更するのに対し、同じビット割り当てを保持します。

私が理解できれば、2つのボックスがあり、それぞれに最大8個のボールが入っているように考えることができます。ボックス1は満杯ですが、ボックス2は3つのボールが入っています。ボックスが4つのボールを保持するシステムにこれを今度はtypecastとする。

このシステムでは、ボールを保持するために3つのボックスが必要です。だから、ボックス1と2がいっぱいです。ボックス3は3つのボールを含む。

[8,3]は[4,4,3]に変換されます。あなたが(例えばsingleint8を変更するための)single()作品と同じように私たちの新しいシステムに番号を変換する場合

あるいは、あなたはボールの数ではなく、コンテナを変更したいです。

+0

ありがとうございました!............................................. ........ – Inv3r53

関連する問題