WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Nachkommastellen als Binärzahl

 

Suchender
Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 13.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2013, 16:51     Titel:
  Antworten mit Zitat      
Ich habe ein Problem, Nachkommastellen einer Binärzahl anzugeben.

Folgendes:
Code:
s=dec2bin(0.2);
fprintf('%30.20f' ,s);


Mache ich dies, gibt er mir eine 48.0000... aus (ohne '%30.20f' gibt er mir eine 0, also gerundet richtig). In Wirklichkeit ist es genauer aber 0,0011001100110...
Gebe ich im Command Window aber nur dec2bin(0.2) ein, gibt er mir eine 0 aus, was ja nur näherungsweise richtig ist. Ich möchte aber mehr Nachkommastellen haben. Bestimmt liegt es an den '%30.20f', aber ich weiß nicht, wie ich mit help... in Matlab oder überhaupt im Internet danach suchen soll, weil ich nicht weiß, wie das heißt. Ich möchte dec2bin(0.2) auf viele Stellen genau haben.

Wer weiß weiter?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.04.2013, 17:45     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Bestimmt liegt es an den '%30.20f'

Nein, liegt es nicht. s ist ein einziges Zeichen, wie soll daraus durch fprintf mehr werden?

Aus der Dokumentation von dec2bin:
Zitat:
str = dec2bin(d) binary representation of d as a string. d must be a nonnegative integer smaller than 2^52.


Du kannst deine Zahlen höchstens mit 2^n multiplizieren, sie dann umwandeln, und dann den Dezimalpunkt geeignet verschieben. Vor allem aber musst du die Dezimaldarstellung auch als String (%s oder %c) anzeigen lassen.

Grüße,
Harald

P.S.: Wenn deine Frage nichts mit dem ursprünglichen Thema zu tun hat, mach doch bitte einen neuen Thread auf.
Private Nachricht senden Benutzer-Profile anzeigen
 
Suchender
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 13.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2013, 18:54     Titel:
  Antworten mit Zitat      
Sorry, ich dachte, es wäre besser, wenn ich meine Frage in bestehende Thread stelle, wenn der Thread-Titel passt. Nächstes Mal denke ich daran.

Also, deinem Vorschlag folgend hab eich nun:

Code:
x=dec2bin(floor(x));
u=dec2bin(2^(25)*mod(x,1))/10^(25);
z=x+u;
fprintf('%c',z);


Er gibt mir aber eine 0 aus (wenn ich x=0.2 einsetze). Wie mache ich das nun?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.04.2013, 19:30     Titel:
  Antworten mit Zitat      
Hallo,

ich dachte an etwas anderes:
Code:

x = 0.2;
s = dec2bin(2^25*x);
erg = [s(1:end-24), '.', ...
    repmat('0', 1, max(25-numel(s),0)), ...
    s(max(numel(s)-24,1):end)]
 

Ob das nun für alle Zahlen korrekt funktioniert, musst du noch nachprüfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Suchender
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 13.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2013, 21:56     Titel:
  Antworten mit Zitat      
Eigentlich wollte ich damit noch weiterrechnen, aber bei Multiplikation oder Addition entsteht dann ja ein Vektor.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.04.2013, 22:13     Titel:
  Antworten mit Zitat      
Hallo,

es ist vielleicht noch nicht klar geworden, aber die Binärrepräsentation ist ein String aus Nullen und Einsen. Damit lässt sich schlecht weiterrechnen.
Wenn, dann müsstest du die Binärarithmetik quasi selbst implementieren, aber da sehe ich nicht den Sinn dahinter. Dezimalzahlen sind doch nun nicht sooo schlecht, oder? ;)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Suchender
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 19
Anmeldedatum: 13.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.04.2013, 22:23     Titel:
  Antworten mit Zitat      
Um konkret zu werden: Ich möchte die Fließkommadarstellung einer Zahl haben. Und ich dachte mir, dass ich das Komma einfach verschiebe. Aber so einfach sehe ich da nicht, wie ich das auf die Schnelle machen könnte (bei einer beliebigen Zahl).
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 21.04.2013, 23:29     Titel:
  Antworten mit Zitat      
Hallo,

was verstehst du unter der Fließkommadarstellung, und was haben Binärzahlen damit zu tun?
Willst du etwa da?

Code:
fprintf('%.15e \n', pi)
fprintf('%.15e \n', 10*pi)
fprintf('%.15e \n', 0.1*pi)


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
Gesplittet: 22.04.2013, 02:03 Uhr von Jan S
Von Beitrag Nachkommastellen Matlab aus dem Forum Programmierung
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.04.2013, 02:04     Titel:
  Antworten mit Zitat      
Hallo Suchender,

Bitte hänge eine neue Frage nicht an einen existierenden Thread an. Andernfalls verwirrt es die Leser, weil nicht mehr klar ist, zu welcher Frage die Antworten gehören. Danke!

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.