Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Форматы представления чисел в ЭВМ, непонятный алгоритм 
:(
    Опции темы
Ink82
Дата 8.12.2011, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



Итак есть некое число на экране прибора, которое преобразуется в 4х байтный код..
Второй день бьюсь, не могу понять алгоритм, видимо что то связано с плавающей запятой.. к сожалению тему эту подзабыл ) а точных алгоритмов с примерами не нашел.. 

(число) (4x байтный код числа) (перевел в dec) 
1    D693A400    3 600 000 000    
1,4    9944E2DB    2 571 428 571    
1,5    8F0D1800    2 400 000 000    
2    6B49D200    1 800 000 000    
2,1    662DEC92    1 714 285 714
2,2    6188ED74    1 636 363 636
2,3    5D4B526F    1 565 217 391
2,4    59682F00            1 500 000 000
2,5    55D4A800    1 440 000 000
2,6    52878D89    1 384 615 305
2,7    4F790D55    1 333 333 333
2,8    4CA2716D    1 285 714 285
2,9    49FDF1EE            1 241 379 310
3,0    47868C00    1 200 000 000
4    35A4E900    900 000 000
4,1    3455F60C    878 048 780
4,2    3316F649    857 142 857
4,3    31E6CCD6    837 209 302
4,4    30C476BA    818 181 818
4,5    2FAF0800    800 000 000
4,6    2EA5A937    782 608 695
4,7    2DA79546    765 957 446
4,8    2CB41780    750 000 000
4,9    2BCA89F5    734 693 877
5    2AEA5400    720 000 000
5,5    2703922E    654545454
6    23C34600    600000000
6,5    21030589    553846153
7    1EA76092    514285714
8    1AD27480    450000000
9    17D78400    400000000
10    15752A00    360000000
20    0ABA9500    180000000

т.е. шаг 0,1.. 
похожая штука была где к числу на приборе прибавлялось справа 3 нуля и это переводилось в hex ! но там не было запятой, а тут запятая.. тут сильно все хитрей.
з.ы. если не найду алгоритм, придется просто забить в виде таблицы..
PM MAIL   Вверх
Akina
Дата 8.12.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



число = (4x байтный код единицы) / (4x байтный код числа)

Добавлено через 1 минуту и 9 секунд
напр. код 35A4E900 (для числа 4), соответствено D693A400 / 35A4E900 = 4


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Nikolja
Дата 8.12.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 24.2.2009
Где: Черкассы

Репутация: нет
Всего: -1



Цитата(Ink82 @ 8.12.2011,  12:28)
Итак есть некое число на экране прибора, которое преобразуется в 4х байтный код..

(число) (4x байтный код числа) (перевел в dec) 
1    D693A400    3 600 000 000    

Т.е., если переформулировать вопрос, 
в каком-то приборе 16-ричное число D693A400 означает 1.0 в формате числа с плавающей запятой ? Так?

А если это самое число D693A400 перевести в десятичное целое это будет равно 3 600 000 000.
Я не пересчитывал -- это я по цитируемому сообщению расшифровываю, пытаюсь понять.

И вы хотите спросить, каким образом (по какому принципу) машина может расшифровать D693A400 и как 3 600 000 000, и как 1.0 ? Так я вас понял?


PM MAIL   Вверх
Ink82
Дата 8.12.2011, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



Цитата(Nikolja @ 8.12.2011,  12:47)
Цитата(Ink82 @ 8.12.2011,  12:28)
Итак есть некое число на экране прибора, которое преобразуется в 4х байтный код..

(число) (4x байтный код числа) (перевел в dec) 
1    D693A400    3 600 000 000    

Т.е., если переформулировать вопрос, 
в каком-то приборе 16-ричное число D693A400 означает 1.0 в формате числа с плавающей запятой ? Так?

А если это самое число D693A400 перевести в десятичное целое это будет равно 3 600 000 000.
Я не пересчитывал -- это я по цитируемому сообщению расшифровываю, пытаюсь понять.

И вы хотите спросить, каким образом (по какому принципу) машина может расшифровать D693A400 и как 3 600 000 000, и как 1.0 ? Так я вас понял?

Да, моя задача понять алгоритм перевода экранного числа во внутреннее представление.. 
Т.е. по какому принципу происходит перевод из десятичного числа с запятой в hex код..!

Добавлено через 9 минут и 45 секунд
Цитата(Akina @ 8.12.2011,  12:36)
число = (4x байтный код единицы) / (4x байтный код числа)

Добавлено @ 12:37
напр. код 35A4E900 (для числа 4), соответствено D693A400 / 35A4E900 = 4

Да, походу так и есть.. этот алгоритм работает. почему то я не подумал про арифметические действия )) 

Большое спасибо.. 

Сейчас подумаю и напишу вторую часть )) но это конечно не показывает алгоритм.. почему так как есть, хотя возможно и не было никакого алгоритма, а прогеры забили это от балды использую выше приведенную формулу! Т.е. я хочу сказать, что все равно остается не понятно, почему десятичная 1 означает D693A400, а не какой то другой код.. хотя для выполнения задачи это и не важно.

PM MAIL   Вверх
Nikolja
Дата 8.12.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 24.2.2009
Где: Черкассы

Репутация: нет
Всего: -1



Если хотите основательно, ДЛЯ СЕБЯ, разобраться, то могу порекомендовать почитать в книге Н.Г.Голубь "Искусство программирования на Ассемблере" (Глава 2. Формат представления базовых данных в IBM PC). ТАМ более-менее неплохо и доступно написано, в отличие от большинства книг по Ассемблеру. Когда поймёте, КАК представляется действительное число в двоичном коде (и КАК целое число представляется) -- будете знать, как вашу таблицу расшифровать. Будете ОСМЫСЛЕННО понимать.

Если взяться МНЕ Вам объяснить, то многовато писать придётся, как для сообщения на форуме. Вот я Вам книгу и даже главу в ней нашёл. Попробуйте поискать. НА ФОРУМЕ Вам ТАК не распишут! С табличками, с определениями точными и т.п.

Пару лет назад я на языке Java писал небольшую программку, которая переводит числа в разные форматы. ЕСЛИ я её найду (не обещаю, что найду), то вы в языке Java сумеете разобраться? Знаете хотя бы его основы? Основ будет достаточно.

Это сообщение отредактировал(а) Nikolja - 8.12.2011, 13:13
PM MAIL   Вверх
Ink82
Дата 8.12.2011, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



Цитата(Nikolja @ 8.12.2011,  13:09)
Если хотите основательно, ДЛЯ СЕБЯ, разобраться, то могу порекомендовать почитать в книге Н.Г.Голубь "Искусство программирования на Ассемблере" (Глава 2. Формат представления базовых данных в IBM PC). ТАМ более-менее неплохо и доступно написано, в отличие от большинства книг по Ассемблеру. Когда поймёте, КАК представляется действительное число в двоичном коде (и КАК целое число представляется) -- будете знать, как вашу таблицу расшифровать. Будете ОСМЫСЛЕННО понимать.

Если взяться МНЕ Вам объяснить, то многовато писать придётся, как для сообщения на форуме. Вот я Вам книгу и даже главу в ней нашёл. Попробуйте поискать. НА ФОРУМЕ Вам ТАК не распишут! С табличками, с определениями точными и т.п.

Пару лет назад я на языке Java писал небольшую программку, которая переводит числа в разные форматы. ЕСЛИ я её найду (не обещаю, что найду), то вы в языке Java сумеете разобраться? Знаете хотя бы его основы? Основ будет достаточно.

асм знаю, и паскалевскую с производными системами знаю.. джаву, нет не знаю.. 
хотелось бы на пальцах. 
я теорию плохо понимаю, мне надо практику. 
типа вот число 5 .. переводим его туда то.. получается то то.. 
на вики тоже теория без примеров.. вообщем этим все грешат к сожалению. это чтоб люди деньги платили за репетиторов (

з.ы. Вы мне скажите, Вы видите тут перевод в какую то систему или формат float, или это какая то отсебятина прогера который прошивку прибора писал? 
PM MAIL   Вверх
Nikolja
Дата 8.12.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 24.2.2009
Где: Черкассы

Репутация: нет
Всего: -1



Цитата(Ink82 @ 8.12.2011,  14:25)
Вы мне скажите, Вы видите тут перевод в какую то систему или формат float, или это какая то отсебятина прогера который прошивку прибора писал?

"Гранаты у него не той системы"  (с) smile

Похоже, что какая-то отсебятина! 
Я тут сам сейчас в ту книжку заглянул, что вам рекомендовал. Припомнить, как там действительное число по битам расписывается. Ан нетъ. smile У ВАС что-то другое, не стандартное.

Число у вас размером 4 байта. Следовательно, это тип float, а не double
Число 1.0 типа float равно 16-ричному 3F80 0000
А у Вас равно D693A400.

Цитата
типа вот число 5 .. переводим его туда то.. получается то то.. 

5.0, если угодно, если записать его в 4 байта, будет равно 40A0 0000. А у вас 2AEA 5400. Пока что мне непонятно!

В языке Java есть готовые функции (или как там принято говорить -- методы), чтобы выводить числа в разных форматах. Я вот уже нашёл их. Только толку теперь... У вас, похоже, какой-то другой формат. Не float.

Это сообщение отредактировал(а) Nikolja - 8.12.2011, 14:49
PM MAIL   Вверх
Nikolja
Дата 8.12.2011, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 24.2.2009
Где: Черкассы

Репутация: нет
Всего: -1



Цитата(Akina @ 8.12.2011,  12:36)
число = (4x байтный код единицы) / (4x байтный код числа)

Добавлено @ 12:37
напр. код 35A4E900 (для числа 4), соответствено D693A400 / 35A4E900 = 4

А любопытно было бы понять, откуда такое правило? Почему ТАК? Сам с приборами некоторое время работал, но с таким не сталкивался.

Допустим целые числа возможно таким образом посчитать. А как получить дробные, исходя из такого правила?
К примеру 1.5
D693A400 / 8F0D1800 = 1

Это сообщение отредактировал(а) Nikolja - 8.12.2011, 15:57
PM MAIL   Вверх
Akina
Дата 8.12.2011, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 20
Всего: 454



Цитата(Nikolja @  8.12.2011,  16:56 Найти цитируемый пост)
любопытно было бы понять, откуда такое правило? Почему ТАК? Сам с приборами некоторое время работал, но с таким не сталкивался.

Ну например числа могут быть частотой некоторого сигнала в герцах, а выдаваемый код - количество импульсов опорного генератора частотой 3.6 Ггц, подсчитанное за один период измеяремого сигнала.

Добавлено через 1 минуту и 38 секунд
Цитата(Nikolja @  8.12.2011,  16:56 Найти цитируемый пост)
А как получить дробные, исходя из такого правила?
К примеру 1.5

Вы, батенька, считать не умеете... 
D693A400 / 8F0D1800 = 1.5
А вот 
D693A400 \ 8F0D1800 = 1


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ink82
Дата 8.12.2011, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



переменная так и называется "коэффициент импульсов"  smile 
PM MAIL   Вверх
Ink82
Дата 12.12.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 19.6.2007

Репутация: нет
Всего: нет



(2хбайтный код) (число на экране) (перевел в Dec)

18    0BDB    3035
17,9    0BEC    3052
17,8    0BFD    3069
17,7    0C0F    3087
17,6    0C20    3104
17,5    0C32    3122
17,4    0C43    3139
17,3    0C55    3157
17,2    0C68    3176
17,1    0C7A    3194
17    0C8D    3213
16,9    0CA0    3232
16,8    0CB3    3251
16    0D54    3412
15    0E36    3638
10    153F    5439
8    1A7E    6782
5    232E    9006
4    3456    13398
3    4538    17720
2    662E    26158
1    C312    49938

Здесь второй столбик это начало диапазона при котором получается некое число.
Например код от 0C8D до 0С79 отвечает за число 17.. 
Это говорит о том, что где то при переводе в другой формат отбрасываются какие то нули.. но вот где непонятно. 

p.s. шаг тот же 0,1

Это сообщение отредактировал(а) Ink82 - 12.12.2011, 11:20
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0850 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.