GNU Octave: Как изменить базу с DEC на BIN?

3199
Léo Léopold Hertz 준영

Мне нужно сделать много бинарных вычислений вида:

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 ... 

где 1/11 основание 2 = 1/3 основание 10.

Я не хочу использовать bin2decи dec2binдля двоичного файла. Я хочу делать вычисления, как в DEC, не беспокоясь о громоздких функциях. Так как я могу сделать бинарные вычисления в Octave?

0
Вы должны обозначить ваши ответвления: (10,1 основание 2) ^ (1/3 основание 10) (если это правильно), чтобы ваш вопрос был более ясным. Dennis Williamson 15 лет назад 1

2 ответа на вопрос

2
quack quixote

Длинный ответ: возможно, но вам придется а) запрограммировать его самостоятельно или б) заставить кого-то запрограммировать его для вас. Этот метод написания дробной базы-2 просто не используется в вычислениях.

Программирование функции для преобразования этого представления двоичных чисел в стандартное двоичное двоичное число с двойной точностью IEEE754 не является невозможным, поэтому, если оно абсолютно необходимо, это выполнимо.

Да, но основная проблема Маси здесь состоит в том, чтобы попытаться получить октаву для интерпретации «10.1» как двоичного 2 +, а не десятичного 10.1. 10.1 абсолютно необходимо инкапсулировать в качестве аргумента некоторой функции, но это именно то, чего Маси пытается избежать - эти «громоздкие функции» - так что теперь вы вернулись к тому, с чего начали, функцию для преобразования числа из ее гибридный двоичный формат в формате, понятном октаве .. DaveParillo 15 лет назад 0
правильно (см. мои комментарии под вашим ответом). этот ответ проясняет, что именно он должен сделать, чтобы достичь того, чего он хочет достичь, несмотря на то, что он именно так и не хочет этого достичь. quack quixote 15 лет назад 0
1
DaveParillo

Короткий ответ: ты не можешь. Если я правильно прочитал ваш пример, а 10.1 должен быть двоичным числом с плавающей запятой?, То bin2dec на самом деле не подходит, если ваше число не является строками. Я не знаю о концепции «двоичного числа с плавающей точкой» в октаве. Я думаю, вам придется самостоятельно управлять мантиссой и показателем степени, если вы хотите это сделать.

Если вы настроили всю битовую арифметику, пробовали ли вы функции манипуляции битами ? битсет и тд?

теперь это звучит как проблема преобразования: просто нужно найти способ автоматического преобразования его строки в некоторый двоичный формат с плавающей точкой, который будет понятен Octave. quack quixote 15 лет назад 0
~ кря: все теперь в бинарном, конвертация не моя проблема. Я хочу изменить базу в среде, не нужно постоянно беспокоиться о конверсии. Léo Léopold Hertz 준영 15 лет назад 0
Маси, компьютеры не читают числа с плавающей запятой в такого рода двоичных файлах. они используют IEEE754 или другие представления. quack quixote 15 лет назад 0
например, ваша "10,1 база 2" = 4,5 база 10 = 0x40900000 в формате с плавающей точкой одинарной точности IEEE754. (или это так? я получил преобразование в базу 10 правильно?) см. http://babbage.cs.qc.cuny.edu/IEEE-754/Decimal.html quack quixote 15 лет назад 0
Oik? С уважением. ххххххх Xavierjazz 15 лет назад 0
@Masi - 10.1 НЕ является двоичным представлением в октаве. ** не существует **. В первой строке у вас есть 10.1 - возьмите это число и вычтите 1 из него. Что ты видишь? Вы видите 1.1? или 9,1? Вы видите 9.1. Octave всегда будет интерпретировать это как десятичное, если вы не сделаете что-то, чтобы объявить это иначе. DaveParillo 15 лет назад 0
какой позор; не похоже, чтобы общее дробное число в базе n было бы так сложно запрограммировать. Я помню, как работал с двоичными числами именно в этом формате, когда изучал основы компьютерного курса. конечно, следующее, что мы узнали, было то, как взять это и вставить его в IEEE754 для фактического использования. но универсальный модуль base-n был бы полезен, особенно для образования. quack quixote 15 лет назад 0
Да, но октава @Masi хочет просто «знать», что в данном случае 10.1 является двоичным. Подумайте обо всех возможных неясностях, связанных с «произвольной базовой» системой расчетов. Что становится результатом 7 * 10? такое 10 двоичное, восьмеричное или десятичное? Учитывая, что 14, 56 и 70 - все правильные ответы. Я бы порекомендовал что-то вроде eval_base (7 * 10, 8), чтобы в eval_base была информация, необходимая для того, чтобы знать, какую числовую базу использовать (т.е. 8) DaveParillo 15 лет назад 0
Просто чтобы быть понятным, eval_base - это функция, которая не существует. Вы должны написать это ;-) DaveParillo 15 лет назад 0
конечно, много неясностей. но много потенциальных решений тоже. если я называю "set_base 8", то вычисляю "7 * 10", о чем я просил? или, может быть, мне нужно вызвать отдельные функции "set_input_base" и "set_output_base". математические системы, подобные этой, уже делают предположения о предпочтительной базе пользователя (например, предположим, что base-10, если ему не предшествует 0x; выведите base-10, если явно не указано иное). произвольная базовая система все еще делает предположения, она просто обеспечивает более простой способ переопределения этих предположений. quack quixote 15 лет назад 0