2016-05-27 4 views
2

Gibt es eine Möglichkeit, in Matlab eine Dezimalzahl zwischen $ 0 $ und $ 1 $, die nicht ganzzahlig ist, in Basis 4 zu konvertieren? Z.B. wenn ich 2/5 setze, möchte ich 0.12121212 bekommen ... (mit etwas Approximation, denke ich)Wandeln Sie in Matlab eine Dezimalzahl, die nicht ganzzahlig ist, in Basis 4 um?

Die Funktion dec2base funktioniert nur für Integer.

+1

Verwandte Problem von MATLAB: https://www.mathworks.com/matlabcentral/cody/problems/42758-convert- Float-zu-Base-n. Die Tatsache, dass es existiert, bedeutet, dass es keine MATLAB-Funktion gibt, um dies zu tun, müssen Sie es selbst codieren –

+3

Ich kenne keine eingebauten Funktionen, um Basis-Konvertierungen auf Nicht-Ganzzahlen zu machen. Du könntest es immer manuell machen. – beaker

+0

Ich dachte über diesen Weg (unvollständig): Wenn a ist die Zahl und es ist zwischen 0 und 1, dann b = Stock (a * 4); r = abs (a * 4-b) = c; d = Boden (c * 4); r = abs (4 * c-d); .... sollte alle Ziffern nach dem Komma geben (denke ich). – user3285148

Antwort

4

In diesem Beitrag wird ein vektorisierter Ansatz aufgeführt, der alle möglichen Kombinationen von Ziffern durchläuft, um den besten für die endgültige Ausgabe als Zeichenfolge auszuwählen. Bitte beachten Sie, dass es wegen seiner Art, alle möglichen Kombinationen zu erstellen, speicherintensiv und langsamer als ein rekursiver Ansatz wäre, aber ich schätze, es könnte nur zu Spaß oder zu pädagogischen Zwecken verwendet werden!

Hier ist die Funktion Implementierung -

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; 

Beispielläufe -

>> 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 
Verwandte Themen