Вверх ↑
Этот топик читают: Гость
Ответов: 499
Рейтинг: 1
#1: 2007-04-20 06:58:58 ЛС | профиль | цитата
столкнулся с необходимостью перевода числа в дробное представление. имеющиеся конвертеры в хасме вроде как не позволяют сделать это сразу. число представлено в виде 4-х считанных из файла байт.
направьте на путь правильный, плиз.

вот нашел страничку, где онлайн конвертер есть (http://babbage.cs.qc.edu/IEEE-754/32bit.html)
он мне число 0xC36FE427 перевел как -239.89122009277344

сделал схему
Add(MainForm,5927321,14,14)
{
Left=20
Top=105
Width=429
Point(onMouseDown)
link(onCreate,8706712:doData,[])
}
Add(Edit,14198300,112,49)
{
Left=10
Top=10
Width=85
Text=""
link(onChange,7563238:doConvert,[])
}
Add(Length,341862,574,119)
{
link(onLength,1041362:doCalc,[(615,125)(615,233)(312,233)(312,195)])
}
Add(Convertor,7563238,154,49)
{
Mode=5
link(onResult,6826653:doConvert,[])
}
Add(Memory,2823152,238,49)
{
link(onData,14024750:doCopy,[(280,55)(280,100)(228,100)(228,125)])
}
Add(Convertor,6826653,196,49)
{
Mode=8
Digits=32
link(onResult,2823152:doValue,[])
}
Add(MathParse,1041362,322,189)
{
DataCount=4
MathStr="-1 * %1 * (2^%2)*(1+%3/(10^%4))"
link(onResult,1786382:doText,[])
link(X1,12765392:Value,[(328,170)(286,170)])
link(X2,1267942:Result,[(335,170)(412,170)])
link(X3,5156670:Value,[(342,175)(538,175)])
link(X4,341862:Result,[(349,181)(580,181)])
}
Add(Copy,14024750,238,119)
{
Position=1
Count=1
link(onCopy,12765392:doValue,[])
link(Str,15335938:Var2,[(244,115)(244,122)])
}
Add(DoData,8706712,63,49)
{
Data=String(C36FE427)
link(onEventData,14198300:doText,[])
}
Add(Edit,1786382,371,189)
{
Left=10
Top=40
Width=85
Text=""
}
Add(Convertor,7526462,364,119)
{
Mode=7
link(onResult,1267942:doOperation,[])
}
Add(Copy,5607076,322,119)
{
Position=2
Count=8
link(onCopy,7526462:doConvert,[])
link(Str,2768779:Var2,[])
}
Add(Copy,10509210,448,119)
{
Position=10
Count=23
link(onCopy,3318578:doConvert,[])
link(Str,2768779:Var3,[(454,107)])
}
Add(Memory,12765392,280,119)
{
link(onData,5607076:doCopy,[])
}
Add(Memory,5156670,532,119)
{
link(onData,341862:doLength,[])
}
Add(Math,1267942,406,119)
{
OpType=1
Op2=127
ResultType=0
link(onResult,10509210:doCopy,[])
}
Add(Convertor,3318578,490,119)
{
Mode=7
link(onResult,5156670:doValue,[(586,125)(523,125)])
}
Add(GetDataEx,15335938,231,98)
{
link(Data,2823152:Value,[(244,88)(244,88)])
}
Add(GetDataEx,2768779,315,98)
{
Angle=2
link(Data,15335938:Var3,[(328,107)])
}
она переводит хекс в целое, затем целое в двоичное элементом Convertor.
затем полученные биты делю на знак, порядок и мантиссу (1, 8, 23 бита) и перевожу обратно в целые (int). далее мат. парсер считает и по след. формуле:
-1 * %1 * (2^%2)*(1+%3/(10^%4))
%1 - бит знака, %2 - порядок, %3 - мантисса, %4 - кол-во знаков в мантиссе.
в итоге получается -221.8611584, что отличается от того, что скрипт на странице считал, и от реального значения.

где-то погрешность накапливается? или я не так считаю?
ну с обратном переводом (дробное в хекс) полный провал. математики, подскажете?

карма: 0

0
Ответов: 338
Рейтинг: 3
#2: 2007-04-20 08:57:43 ЛС | профиль | цитата
Говорили мне что учится нужно, а то что сразу дано нечего не значит

[size=-2]------ Добавлено в 08:57
а что означает "^"?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 1397
Рейтинг: 50
#3: 2007-04-20 09:12:44 ЛС | профиль | цитата
Dark_MX писал(а):
а что означает "^"?

Возведение в степень. Вообще то в справке на мат. парсер описание есть.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 338
Рейтинг: 3
#4: 2007-04-20 09:26:01 ЛС | профиль | цитата
Возведение в степень. Вообще то в справке на мат. парсер описание есть.[/code]
Предполагаю что это: "/" корень ;-).  (Шутка, возможно не вовремя)
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 9906
Рейтинг: 351
#5: 2007-04-20 09:29:52 ЛС | профиль | цитата
code_1328.txt
карма: 9

0
файлы: 1code_1328.txt [1.4KB] [287]
Ответов: 499
Рейтинг: 1
#6: 2007-04-20 10:30:19 ЛС | профиль | цитата
оно самое, спасибо.
разница в последнем множителе, у вас: 1+%3/2^23, а у меня было 1+%3/10^%4.
то есть у вас получилось - 1,87415015697479248046875, а у меня 1,7332903
но я пока не понял, почему. мантисса нормализуется, что ли, при преобразовании?

и кстати, что элемент Edit может работать конвертором - не знал до сих пор ;)

[size=-2]------ Добавлено в 10:30
и может кто знает, почему у меня схема на два экрана висит, а у Galkov-а ссылкой организовалась?
карма: 0

0
Ответов: 2060
Рейтинг: 28
#7: 2007-04-20 10:59:50 ЛС | профиль | цитата
HikeR писал(а):
и может кто знает, почему у меня схема на два экрана висит, а у Galkov-а ссылкой организовалась?

Ты после посылания сообщения на форум это же сообщение рендоктировал?
карма: 1

0
Ответов: 3851
Рейтинг: 159
#8: 2007-04-20 11:05:04 ЛС | профиль | цитата
Эдик писал(а):
рендоктировал

А, что - надо редактировать, чтобы свернулась?
Свежий случай - новая тема (не редактировалась) - не свернулась..
карма: 0
начавший
0
Ответов: 9906
Рейтинг: 351
#9: 2007-04-20 11:13:51 ЛС | профиль | цитата
Чтобы свернулось надо еще и код длиннее чего-то (кажется 512)
карма: 9

0
Ответов: 2125
Рейтинг: 159
#10: 2007-04-20 11:15:29 ЛС | профиль | цитата
500
карма: 1

0
Ответов: 9906
Рейтинг: 351
#11: 2007-04-20 11:18:37 ЛС | профиль | цитата
Да...
Чего замечен был Dilma в отступлении от программерских обычаев
карма: 9

0
Ответов: 16884
Рейтинг: 1239
#12: 2007-04-20 11:21:01 ЛС | профиль | цитата
Ну там кода намного больше 500
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 2060
Рейтинг: 28
#13: 2007-04-20 11:21:21 ЛС | профиль | цитата
Андрей. писал(а):
А, что - надо редактировать, чтобы свернулась?

По идие кок раз токи и не надо редоктировать и при этом надо иметь код свыше 500 байт. И он у тебя свернёться. Но если ты, после, это же сообщение будешь редоктировать, то новый код у тебя уже не свернёться. И будет на 3 экрана. Об этом не надо переживать. Админы тебе его свернут если надо будет.
карма: 1

0
Ответов: 499
Рейтинг: 1
#14: 2007-04-20 11:51:08 ЛС | профиль | цитата
кода действительно на 2151 букв.
а схему я помещал после третьего редактирования.
карма: 0

0
Ответов: 278
Рейтинг: 4
#15: 2007-04-20 23:51:43 ЛС | профиль | цитата
Вот, вот! Guys! Не хочется делать новую тему, т.к. это почти то-же самое что я хотел спросить.

Хочу я установить иконку на папку (точнее чтобы это сделела программа), как например это делает Explorer - Свойства -> Настройка -> Сменить значок.
Закидываю в папку INI, вообщем всё делаю идентично ему, НО! Требуется некое обновление кеша ключа

"{7A5117B0-B594-4DA8-829D-D15BF11996F2} {E8025004-1C42-11D2-BE2C-00A0C9A83DA1} 0x401", который находиться по адресу

"SoftwareMicrosoftWindowsCurrentVersionShell ExtensionsCached". Так вот, Explorer,
естественно обновляет его по нажатии ОК или Восстановить умолчания (причем мою иконку тоже).
Так вот, по всей видимости файл бинарный, пытался конвертировать, как рассказывал HikeR - толку нет! Удалял - тем более. Выследил что именно этот ключ, и только он даёт обновление (если считать только Реестр). А может действительно есть какая-то ещё приблуда, помимо Реестра?

Пожалуйста, Guys, помогите кто может, чем может
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)