GNU Octave: Wie wechselt man die Basis von DEC zu BIN?

3357
Léo Léopold Hertz 준영

Ich muss viele binäre Berechnungen der Form machen:

10.1^(1/11) base 2 10.001^(1/11) base 2 10.0001^(1/11) base 2 10.00001^(1/11) base 2 10.000001^(1/11) base 2 ... 

wobei 1/11 Basis 2 = 1/3 Basis 10.

Ich möchte bin2decund nicht dec2binfür binär verwenden. Ich möchte Berechnungen wie in DEC machen, ohne mich um die umständlichen Funktionen zu kümmern. Wie kann ich also die binären Berechnungen in Octave durchführen?

0
Sie sollten Ihre Radices mit einem Label versehen: (10.1 Basis 2) ^ (1/3 Basis 10) (falls dies richtig ist), damit Ihre Frage klarer ist. Dennis Williamson vor 14 Jahren 1

2 Antworten auf die Frage

2
quack quixote

Die lange Antwort ist, es ist möglich, aber Sie müssen a) es selbst programmieren oder b) jemanden veranlassen, es für Sie zu programmieren. Diese Methode zum Schreiben der gebrochenen Basis-2 wird im Rechnen einfach nicht verwendet.

Das Programmieren einer Funktion zum Konvertieren dieser Darstellung von gebrochenen Binärzahlen in Fließkomma-Binärzahlen der Standard-IEEE754-Doppelgenauigkeit ist nicht unmöglich. Wenn dies ein absolutes Muss ist, ist dies machbar.

Yes, but Masi's fundamental problem here is trying to get octave to interpret "10.1" as the binary 2 + a bit, as opposed to the decimal 10.1. The 10.1 absolutely has to be encapsulated as a argument to some functiont, but that is exactly what masi is trying to avoid - those "cumbersome functions" - so now you're right back where you started, a function to convert the number from it's hybrid binary format to a format understandable by octave.. DaveParillo vor 14 Jahren 0
correct (see my comments under your answer). this answer is clarifying exactly what he must do to accomplish what he wants to accomplish it -- despite being exactly the way he doesn't want to accomplish it. quack quixote vor 14 Jahren 0
1
DaveParillo

Die kurze Antwort lautet: Du kannst es nicht. Wenn ich Ihr Beispiel richtig durchgelesen habe und 10.1 eine binäre Fließkommazahl sein soll?, Ist bin2dec nicht wirklich geeignet, es sei denn, Ihre Zahl sind alle Zeichenfolgen. Das Konzept der 'Gleitkomma-Binärzahl' in der Oktave ist mir nicht bekannt. Ich denke, Sie müssen die Mantisse und den Exponent manuell selbst verwalten, wenn Sie das wollen.

Wenn Sie auf alle Bitarithmetik eingestellt sind, haben Sie die Bitmanipulationsfunktionen ausprobiert ? Bitsatz usw.?

Das klingt jetzt nach einem Konvertierungsproblem: Sie müssen nur einen Weg finden, um seinen String automatisch in ein binäres Float-Format umzuwandeln, das Octave verstehen wird. quack quixote vor 14 Jahren 0
~ quack: alles ist jetzt in Binary, Konvertierung ist nicht mein Problem. Ich möchte die Basis in der Umgebung ändern, ohne mich ständig um die Konvertierung kümmern zu müssen. Léo Léopold Hertz 준영 vor 14 Jahren 0
Masi, computers don't read floating point numbers in that kind of binary. they use IEEE754 or other representations. quack quixote vor 14 Jahren 0
eg your "10.1 base 2" = 4.5 base 10 = 0x40900000 in IEEE754 single-precision floating point format. (or does it? did i get the conversion to base 10 right?) see http://babbage.cs.qc.cuny.edu/IEEE-754/Decimal.html quack quixote vor 14 Jahren 0
oik? Grüße. xxxxxxx Xavierjazz vor 14 Jahren 0
@Masi - 10.1 is NOT a binary representation of any kind in octave. **It doesn't exist**. In your first line you have 10.1 - take this number and subtract 1 from it. What do you see? Do you see 1.1? or 9.1? You see 9.1. Octave is always going to interpret this as decimal unless you do something to declare it as otherwise. DaveParillo vor 14 Jahren 0
which is a shame; it doesn't seem like a generic fractional-number-in-base-n would be that difficult to program. i remember working out binary numbers in exactly this format when learning basics for a compsci course. of course, next thing we learned was how to take that and put it into IEEE754 for actual use. but a generic base-n module would be handy, particularly for education. quack quixote vor 14 Jahren 0
Yes, but @Masi want's octave to just "know" that 10.1 is binary in this instance. Think of all the possible ambiguities associated with an "arbitrary base" calculation system. What becomes the result of 7 * 10? is 10 binary, octal or decimal? Given that, 14, 56 & 70 are all valid answers. I would recommend something like eval_base(7 * 10, 8), so that eval_base has the information it needs to know what number base to use (i.e. 8) DaveParillo vor 14 Jahren 0
Um es klar zu sagen: "eval_base" ist eine Funktion, die nicht existiert. Du müsstest es schreiben ;-) DaveParillo vor 14 Jahren 0
sicher, viel zweideutigkeit. aber auch viele mögliche lösungen. wenn ich "set_base 8" anrufe, dann "7 * 10" berechnen, nach der ich gefragt habe? oder vielleicht muss ich separate Funktionen "set_input_base" und "set_output_base" aufrufen. mathematische Systeme wie diese machen bereits Annahmen über die bevorzugte Basis des Benutzers (z. B. nehmen Sie Basis-10 an, sofern nicht 0x vorangestellt ist; geben Sie Basis-10 aus, sofern nicht ausdrücklich etwas anderes gesagt wird). Ein willkürliches Basissystem würde immer noch Annahmen treffen, es bietet lediglich eine einfachere Möglichkeit, diese Annahmen zu überschreiben. quack quixote vor 14 Jahren 0