Forth
http://fforum.winglion.ru/

Float и SPF4 ( что и как )
http://fforum.winglion.ru/viewtopic.php?f=39&t=2276
Страница 1 из 2

Автор:  MrYuran [ Пн июл 27, 2009 11:03 ]
Заголовок сообщения: 

Some Question...
На стеке лежит float в виде 4-х байтов
В каждой ячейке по байту, младший внизу, старший снаружи.
Как мне его вывести на экран в человеческом виде ? (xx,yy e zz)
А потом наоборот.
Ввести с клавы плавающее число и упаковать соответственно на стеке

Автор:  Гость [ Пн июл 27, 2009 11:31 ]
Заголовок сообщения: 

MrYuran писал(а):
Some Question...
На стеке лежит float в виде 4-х байтов
В каждой ячейке по байту, младший внизу, старший снаружи.
Как мне его вывести на экран в человеческом виде ? (xx,yy e zz)
А потом наоборот.
Ввести с клавы плавающее число и упаковать соответственно на стеке


Библиотека lib\include\float2.f
и поиск по слову FLOAT

Автор:  Гость [ Пн июл 27, 2009 11:34 ]
Заголовок сообщения: 

Ввод строк с клавиатуры например так: PAD DUP 80 ACCEPT ( addr # )

Автор:  Kopa [ Пн июл 27, 2009 11:52 ]
Заголовок сообщения: 

Библиотека float2.f доопределит ввод для FLOAT чисел. ( через NOTFOUND )
флоат число записывается с Е ( вывод F. FE. и др )

Стандартные флоат слоава есть в ядре ( src\spf_floatkern.f )

Одна из библиотек для обычной записи Формул ~ygrek\lib\neilbawd\opg.f

Автор:  MrYuran [ Пн июл 27, 2009 12:28 ]
Заголовок сообщения: 

Kopa писал(а):
флоат число записывается с Е

float2.f
Ok ( 4294967295(-1) )
12 E 6
12 E 6
^ -2003 WORD OR FILE NOT FOUND
что-то не так...

Если не трудно, объясните основные концепции, а то я разбираться буду до конца дня...
И так всё горит...

Автор:  Гость [ Пн июл 27, 2009 13:05 ]
Заголовок сообщения: 

MrYuran писал(а):
12 E 6
^ -2003 WORD OR FILE NOT FOUND
что-то не так...

Если не трудно, объясните основные концепции, а то я разбираться буду до конца дня...
И так всё горит...


Слитно записывать :)
и смотреть стековую нотацию нужных слов библиотеки.
Флоат вводятся на отдельный стек и существуют слова по переносу чиссел D>F F>D и др.

F. \ вывод числа в консоль

Автор:  MrYuran [ Пн июл 27, 2009 13:19 ]
Заголовок сообщения: 

Спасибо, теперь допёр
FVARIABLE float
Ok
12.3E
Ok
float F!
Ok
float F.
infinity Ok ( 5705780 )
float F@ F.
12.300000 Ok ( 5705780 )

Автор:  MrYuran [ Пн июл 27, 2009 13:37 ]
Заголовок сообщения: 

Однако остался ещё вопрос: как мне 4 байта (формат IEEE 754) перенести на флотовый стек, а потом обратно?
12.3E
Ok \ число на float-стеке
float F!
Ok \ занёс в переменную
HEX
Ok
float @ \ хочу посмотреть значение
Ok ( 9999999A(-66666666) ) \ ерунда какая-то
Должно получиться 41 44 СС CD (или наоборот)

Автор:  MrYuran [ Пн июл 27, 2009 14:12 ]
Заголовок сообщения: 

Гость писал(а):
и смотреть стековую нотацию нужных слов библиотеки

: F~ ( F1 F2 F3 -- FLAG ) \ FLOAT-EXT
Непонятно ни назначение слова, ни комментарий

В каком хотя бы виде эти флоты в памяти хранятся?
Нигде никаких упоминаний...

Автор:  MrYuran [ Пн июл 27, 2009 14:22 ]
Заголовок сообщения: 

: 2e 2.E ;
: 1e 1.E ;
: .e .E ;

И откуда взялись 2.E, 1.E и .E, если ничего не подключалось?

Автор:  VoidVolker [ Пн июл 27, 2009 14:26 ]
Заголовок сообщения: 

MrYuran писал(а):
12.3E
Ok \ число на float-стеке
float F!
Ok \ занёс в переменную
HEX
Ok
float @ \ хочу посмотреть значение
Ok ( 9999999A(-66666666) ) \ ерунда какая-то
Должно получиться 41 44 СС CD (или наоборот)

Float-переменные хранят флоат-числа в виде 8 байт, поэтому и результат такой. Чтобы получилось 41 44 СС CD необходимо сохранить флоат-число в переменную в формате short-float (4 байта):
Код:
FLOAT r
12.3E r SF! r @ .
4144ССCD

MrYuran писал(а):
Однако остался ещё вопрос: как мне 4 байта (формат IEEE 754) перенести на флотовый стек, а потом обратно?

Должны быть слова для передачи данных между стеками без преобразования. Как вариант можно сохранить данные в переменную, а из неё их извлечь на стек.
.

Автор:  chu [ Пн июл 27, 2009 14:27 ]
Заголовок сообщения: 

spf_floatkern.f


CODE 2.E
MOV DWORD -4 [EBP], # 2
FILD DWORD -4 [EBP]
RET
END-CODE

Автор:  Kopa [ Пн июл 27, 2009 14:50 ]
Заголовок сообщения: 

VoidVolker писал(а):
MrYuran писал(а):
Однако остался ещё вопрос: как мне 4 байта (формат IEEE 754) перенести на флотовый стек, а потом обратно?

.


DATA>FLOAT32 FLOAT>DATA32 \ для коротких переменных см. src\spf_floatkern.f

Автор:  MrYuran [ Пн июл 27, 2009 15:15 ]
Заголовок сообщения: 

VoidVolker писал(а):
FLOAT r
12.3E r SF! r @ .
4144ССCD

Ура. Заработало.
Остался крайний штрих:
FVARIABLE Conductivity
...
DUP . ." Conductivity " Conductivity ! F. CR
Получаю:
\ на стеке (общем) 449A5000 == 1234,5
449A5000 Conductivity EXCEPTION! CODE:C0000092 ADDRESS:0056E0F3 WORD:PrintFInf
USER DATA: 00341E94 THREAD ID: 00001778 HANDLER: 0012EFE8
STACK: (3) 7FFD7000 0021F5FE 00150000 7C816D4F FFFFFFFF FFFFFC03 [0056D170]
RETURN STACK:
0012EFC4 : 0056D19F FINF
0012EFC8 : 0056E0FA PrintFInf
0012EFCC : 0056E22C F.
0012EFD0 : 0056F21A FormFrame
0012EFD4 : 0056F287 Dpack
0012EFD8 : 00567C5B INTERPRET_
0012EFDC : 00567CE2 INTERPRET
0012EFE0 : 00567F09 MAIN1
0012EFE4 : 0055516C CATCH
0012EFE8 : 0012EFF8
0012EFEC : 0012FFBC
0012EFF0 : 00567F59 QUIT
0012EFF4 : 0055516C CATCH
0012EFF8 : 00000000
0012EFFC : 0012FFBC
0012F000 : 0056B07D ERR-EXIT
0012F004 : 0056BC66 (INIT)
END OF EXCEPTION REPORT

А тут какая собака порылась?

Автор:  Гость [ Пн июл 27, 2009 15:36 ]
Заголовок сообщения: 

MrYuran писал(а):
Остался крайний штрих:
FVARIABLE Conductivity
...
DUP . ." Conductivity " Conductivity ! F. CR
Получаю: ....


Conductivity @ DATA>FLOAT32 F. CR ( можно FE. )

P.S. Есть полезное слово DUMP ( addr # -- )

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/