Quantcast

Деление с точкой

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Деление с точкой

витя ерыгин

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

Королев Виктор
F>D копирует целое число с арифметического стека на стек, причем без округления 
Возможный вариант умножить результат в n 10 раз, на n требуемое количество разрядов после запятой
К примеру до 3-х знаков:
10 DS>F \ или 10. D>F
3  DS>F \ или 3. D>F
F/ 
F10* F10* F10*
FINT \ если нужно округление по установленным правилам
F>D \ Далее использовать по назначению
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <[hidden email]>:

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин ,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

витя ерыгин
Относительно форматного вывода, а если после запятой идёт 0? Он не отображается. В этом деле понимания маловато


Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор <[hidden email]>:

F>D копирует целое число с арифметического стека на стек, причем без округления 
Возможный вариант умножить результат в n 10 раз, на n требуемое количество разрядов после запятой
К примеру до 3-х знаков:
10 DS>F \ или 10. D>F
3  DS>F \ или 3. D>F
F/ 
F10* F10* F10*
FINT \ если нужно округление по установленным правилам
F>D \ Далее использовать по назначению
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <vitai96@...>:

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин ,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev



------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

Dmitry Yakimov
Привет,

Можно более кратко
10e 3e F/ F.

Можно получить строку
10e 3e F/ >FNUM TYPE

Если нужно получить на стеке именно два целых числа отражающих целую и дробную часть возникает вопрос - сколько знаков дробной части нужно. Если например нужно два
то:

10e 3e F/ FDUP F>D DROP \ выделили целую часть
FDUP FLOOR F- \ выделили дробную часть
100e ( два знака ) F* FLOOR F>D DROP

Вот так.
С уважением,
Дмитрий Якимов

2016-04-13 21:28 GMT+03:00 витя ерыгин <[hidden email]>:
Относительно форматного вывода, а если после запятой идёт 0? Он не отображается. В этом деле понимания маловато


Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор <[hidden email]>:


F>D копирует целое число с арифметического стека на стек, причем без округления 
Возможный вариант умножить результат в n 10 раз, на n требуемое количество разрядов после запятой
К примеру до 3-х знаков:
10 DS>F \ или 10. D>F
3  DS>F \ или 3. D>F
F/ 
F10* F10* F10*
FINT \ если нужно округление по установленным правилам
F>D \ Далее использовать по назначению
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <vitai96@...>:

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин ,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev



------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev



------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

витя ерыгин
Спасибо!
На работе думал как ещё получить  дробь делением двух целых. Додумался через <# делать в виде двух строк


Четверг, 14 апреля 2016, 19:25 +04:00 от Dmitry Yakimov <[hidden email]>:

Привет,

Можно более кратко
10e 3e F/ F.

Можно получить строку
10e 3e F/ >FNUM TYPE

Если нужно получить на стеке именно два целых числа отражающих целую и дробную часть возникает вопрос - сколько знаков дробной части нужно. Если например нужно два
то:

10e 3e F/ FDUP F>D DROP \ выделили целую часть
FDUP FLOOR F- \ выделили дробную часть
100e ( два знака ) F* FLOOR F>D DROP

Вот так.
С уважением,
Дмитрий Якимов

2016-04-13 21:28 GMT+03:00 витя ерыгин <vitai96@...>:
Относительно форматного вывода, а если после запятой идёт 0? Он не отображается. В этом деле понимания маловато


Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор <vict-korolev@...>:


F>D копирует целое число с арифметического стека на стек, причем без округления 
Возможный вариант умножить результат в n 10 раз, на n требуемое количество разрядов после запятой
К примеру до 3-х знаков:
10 DS>F \ или 10. D>F
3  DS>F \ или 3. D>F
F/ 
F10* F10* F10*
FINT \ если нужно округление по установленным правилам
F>D \ Далее использовать по назначению
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <vitai96@...>:

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин ,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev



------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev




------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

Королев Виктор
Если двойные числа не нужны, можно результат деления, с учетом разрядности, снять со стека 
F>DS ( -- n )
100 \ разрядность
/MOD  ( -- остаток целое ) DROP \ целое если не нужно
100 \ разрядность
* ( -- n ) \ остаток с учетом разрядности
 
 
14.04.2016, 18:33, "витя ерыгин" <[hidden email]>:
Спасибо!
На работе думал как ещё получить  дробь делением двух целых. Додумался через <# делать в виде двух строк


Четверг, 14 апреля 2016, 19:25 +04:00 от Dmitry Yakimov <[hidden email]>:

Привет,
 
Можно более кратко
10e 3e F/ F.
 
Можно получить строку
10e 3e F/ >FNUM TYPE
 
Если нужно получить на стеке именно два целых числа отражающих целую и дробную часть возникает вопрос - сколько знаков дробной части нужно. Если например нужно два
то:
 
10e 3e F/ FDUP F>D DROP \ выделили целую часть
FDUP FLOOR F- \ выделили дробную часть
100e ( два знака ) F* FLOOR F>D DROP
 
Вот так.
С уважением,
Дмитрий Якимов

2016-04-13 21:28 GMT+03:00 витя ерыгин <vitai96@...>:
Относительно форматного вывода, а если после запятой идёт 0? Он не отображается. В этом деле понимания маловато


Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор <vict-korolev@...>:


F>D копирует целое число с арифметического стека на стек, причем без округления 
Возможный вариант умножить результат в n 10 раз, на n требуемое количество разрядов после запятой
К примеру до 3-х знаков:
10 DS>F \ или 10. D>F
3  DS>F \ или 3. D>F
F/ 
F10* F10* F10*
FINT \ если нужно округление по установленным правилам
F>D \ Далее использовать по назначению
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <vitai96@...>:

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин ,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev

,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

Королев Виктор
In reply to this post by витя ерыгин
Сам запутался.. так правильнее
Если двойные числа не нужны, можно результат деления, с учетом разрядности, снять со стека 
F>DS ( -- n )
100 \ разрядность
/MOD  ( -- остаток целое ) DROP \ целое если не нужно
 ( -- n ) \ остаток с учетом разрядности
 
 
14.04.2016, 18:33, "витя ерыгин" <[hidden email]>:
Спасибо!
На работе думал как ещё получить  дробь делением двух целых. Додумался через <# делать в виде двух строк


Четверг, 14 апреля 2016, 19:25 +04:00 от Dmitry Yakimov <[hidden email]>:

Привет,
 
Можно более кратко
10e 3e F/ F.
 
Можно получить строку
10e 3e F/ >FNUM TYPE
 
Если нужно получить на стеке именно два целых числа отражающих целую и дробную часть возникает вопрос - сколько знаков дробной части нужно. Если например нужно два
то:
 
10e 3e F/ FDUP F>D DROP \ выделили целую часть
FDUP FLOOR F- \ выделили дробную часть
100e ( два знака ) F* FLOOR F>D DROP
 
Вот так.
С уважением,
Дмитрий Якимов

2016-04-13 21:28 GMT+03:00 витя ерыгин <vitai96@...>:
Относительно форматного вывода, а если после запятой идёт 0? Он не отображается. В этом деле понимания маловато


Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор <vict-korolev@...>:


F>D копирует целое число с арифметического стека на стек, причем без округления 
Возможный вариант умножить результат в n 10 раз, на n требуемое количество разрядов после запятой
К примеру до 3-х знаков:
10 DS>F \ или 10. D>F
3  DS>F \ или 3. D>F
F/ 
F10* F10* F10*
FINT \ если нужно округление по установленным правилам
F>D \ Далее использовать по назначению
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <vitai96@...>:

Необходимо получить результат от деления двух целых чисел в виде двойного числа
10 0 d>f
3  0  d>f
f/
f>d
 выдаёт 3 0, а не 3 333...



--
Виктор Ерыгин ,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev

,

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z

,

_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

Ruvim Pinka
In reply to this post by витя ерыгин

2016-04-13 21:28 GMT+03:00 витя ерыгин <[hidden email]>:

Относительно форматного вывода, а если после запятой идёт 0? Он не отображается. В этом деле понимания маловато

Вторник, 12 апреля 2016, 20:51 +04:00 от Королев Виктор <[hidden email]>:
\ или вывод в форматном  виде
( d -- adr u ) SWAP OVER DABS <# # # # [CHAR] . HOLD #S ROT SIGN #>
 
12.04.2016, 18:42, "витя ерыгин" <vitai96@...>:
Необходимо получить результат от деления двух целых чисел в виде двойного числа
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


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

Ruvim Pinka

2016-04-14 20:56 GMT+03:00 Ruvim Pinka <[hidden email]>:
 
Целую и дробную части можно представить парой целых чисел, при этом дробная часть должна быть числителем простой дроби с заранее фиксированным знаменателем. Например, 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



Следует добавить, что с тем же успехом такое дробное число (представимое в виде простой дроби с фиксированным знаменаелем) можно представить в виде одного целого числа (а не пары). Эта техника многократно описана в литературе.

При этом дробное число 3.33 в тысячных долях представляется числом 3330, а 3.033 — числом 3033

: picture/1000 ( n -- addr u )
  DUP >R ABS S>D <#
  # # # \ три знака для тысячных долей, знаменатель 1000
  [CHAR] . HOLD
  #S R> SIGN #>
;

\ test
3033 picture/1000 TYPE \ 3.033


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

--
Ruvim

------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Деление с точкой

витя ерыгин
Вот примерно так и сделал, кстати


Четверг, 14 апреля 2016, 21:10 +03:00 от Ruvim Pinka <[hidden email]>:


2016-04-14 20:56 GMT+03:00 Ruvim Pinka <ruvim.pinka@...>:
 
Целую и дробную части можно представить парой целых чисел, при этом дробная часть должна быть числителем простой дроби с заранее фиксированным знаменателем. Например, 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



Следует добавить, что с тем же успехом такое дробное число (представимое в виде простой дроби с фиксированным знаменаелем) можно представить в виде одного целого числа (а не пары). Эта техника многократно описана в литературе.

При этом дробное число 3.33 в тысячных долях представляется числом 3330, а 3.033 — числом 3033

: picture/1000 ( n -- addr u )
  DUP >R ABS S>D <#
  # # # \ три знака для тысячных долей, знаменатель 1000
  [CHAR] . HOLD
  #S R> SIGN #>
;

\ test
3033 picture/1000 TYPE \ 3.033


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

--
Ruvim
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
Spf-dev@...
https://lists.sourceforge.net/lists/listinfo/spf-dev


------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Loading...