From: Ruvim P. <ruv...@gm...> - 2016-04-14 17:56:43
|
2016-04-13 21:28 GMT+03:00 витя ерыгин <vi...@ma...>: Относительно форматного вывода, а если после запятой идёт 0? Он не > отображается. В этом деле понимания маловато > > Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор < > vic...@ya...>: > > \ или вывод в форматном виде > ( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #> > > > 12.04.2016, 18:42, "витя ерыгин" <vi...@ma... > <https://e.mail.ru/compose?To=vi...@ma...>>: > > Необходимо получить результат от деления двух целых чисел в виде двойного > числа > 10 0 d>f > 3 0 d>f > f/ > f>d > выдаёт 3 0, а не 3 333... > > Число двойной длины — это целое число. В паре ( 3 0 ) — 0 это старшая часть, 3 это младшая часть. Поэтому, ( 3 333 ) здесь — это нонсенс. Целую и дробную части можно представить парой *целых* чисел, при этом дробная часть должна быть числителем простой дроби с заранее фиксированным знаменателем. Например, 3.33 может быть представлено парой ( 3 330 ) в тысячных долях, или ( 3 33 ) в сотых долях. При этом знаменатель (1000 или 100) должен быть един и фиксирован для всех таких пар. Эта пара *не является числом двойной длины*, поэтому при форматном выводе каждое из чисел этой пары надо обрабатывать отдельно. : picture-pair ( i f -- addr u ) S>D <# # # # \ три знака для тысячных долей, знаменатель 1000 OR ABORT" incorrect fractional part" \ ошибка, если остаток не ноль (f > 999) [CHAR] . HOLD DUP >R ABS S>D #S R> SIGN #> ; \ test 3 33 picture-pair TYPE \ 3.033 -- Ruvim |