2016-05-27 1 views
2

Matlabの基数4に整数ではない$ 0 $と$ 1 $の10進数を変換する方法はありますか?例えば。私が2/5を入れれば私は得たいと思う0.12121212 ...(私が推測するいくつかの近似と)Matlabで整数ではない10進数を基数4に変換しますか?

関数dec2baseは整数のためだけに働く。

+1

関連問題:https://www.mathworks.com/matlabcentral/cody/problems/42758-convert-はfloat-to-base-n。これが存在するということは、これを行うMATLAB関数がないことを意味します。自分でコード化する必要があります。 –

+3

非整数のベース変換を行う組み込み関数がわかりません。あなたはいつもそれを手動で行うことができます。 – beaker

+0

私はこの方法について考えました(不完全)。aが数字で0から1の間であれば、b = floor(a * 4); r = abs(a * 4-b)= c; d =床(c * 4)。 r = abs(4 * c-d); ....はすべての桁をカンマの後に付けるべきです(私は思っています)。 – user3285148

答えて

4

この記事では、文字列として最終出力に最適な数字を選択するために、可能なすべての数字の組み合わせを処理するベクトル化手法を紹介します。すべての可能な組み合わせを作成するという本来の性質のため、再帰的なアプローチよりもメモリ集中型で遅いですが、楽しくて教育的な目的のためだけに使用できると思います。

ここでは関数の実装です -

function s = dec2base_float(d,b,nde) 
%DEC2BASE_FLOAT Convert floating point numbers to base B string. 
% DEC2BASE_FLOAT(D,B) returns the representation of D as a string in 
% base B. D must be a floating point array between 0 and 1. 
% 
% DEC2BASE_FLOAT(D,B,N) produces a representation with at least N decimal digits. 
% 
% Examples 
%  dec2base_float(2/5,4,4) returns '0.1212' 
%  dec2base_float(2/5,3,6) returns '0.101211' 

%// Get "base power-ed scaled" digits 
scale = b.^(-1:-1:-nde); 

%// Calculate all possible combinations 
P = dec2base(0:b^nde-1,b,nde)-'0'; 

%// Get the best possible combination ID. Index into P with it and thus get 
%// based converted number with it 
[~,idx] = min(abs(P*scale(:) - d)); 
s = ['0.',num2str(P(idx,:),'%0.f')]; 

return; 

サンプルの実行 - MATLABによって

>> dec2base_float(2/5,4,4) 
ans = 
0.1212 
>> dec2base_float(2/5,4,6) 
ans = 
0.121212 
>> dec2base_float(2/5,3,6) 
ans = 
0.101211 
関連する問題