×/
×/ (масштабирование) — адаптированное слово Каллисто. Операция масштабирования.
×/ ( z y x −− n ) Делить произведение z × y на x. n := Trunc [z × y/x]
n — результат умножения z на y с последующим целочисленным делением на x.
Произведение z × y, промежуточный результат операции, вычисляется с точностью 14 десятичных знаков.
Ввод слова ×/[править]
В режиме NUM последовательно нажмите три клавиши × F ÷
Пример[править]
Фраза 12345 355 113 ×/ умножает 12345 на дробь 355/113, которая представляет число $\pi$ с точностью 8,5e-8 (Броуди, 1981). Хотя подобный подход избыточен на Каллисто, он позволял писать на целочисленном Форте высокопроизводительные вычислительные программы, например для управления радиотелескопом.
∗/ в стандарте ANS Forth[править]
6.1.0100 ∗/ "star-slash" CORE ( n1 n2 n3 -- n4 ) Умножает n1 на n2, с промежуточным результатом двойная-ячейка d. Делит d на n3, выдает частное одна-ячейка n4. Неопределенная ситуация существует, если n3 нулевое или если частное n4 находится вне диапазона числа со знаком. Если d и n3 отличаются по знаку, возвращенный результат, определенный реализацией будет такой же самый, как и возвращаемый фразой >R M∗ R> FM/MOD SWAP DROP или фразой >R M∗ R> SM/REM SWAP DROP. См.: 3.2.2.1 Целочисленное деление.
История[править]
Впервые операция масштабирования ×/ под именем ∗/ появилась в Форте 1971-73 годах, когда Чак Мур перенёс транслятор на DEC PDP-11 в National Radio Astronomy Observatory (англ., Шарлотсвилл).
Слово ∗/ использовало аппаратное умножение двух 16-битных чисел для получения 32-битного произведения. Разумеется, аргументы брались со стека данных. Затем результат делился для реализации рациональной арифметики.
∗/ в предыдущем стандарте Forth-83 (англ.)[править]
∗/ n1 n2 n3 -- n4 83 "times-divide" n1 is first multiplied by n2 producing an intermediate 32- bit result. n4 is the floor of the quotient of the intermediate 32-bit result divided by the divisor n3. The product of n1 times n2 is maintained as an intermediate 32- bit result for greater precision than the otherwise equivalent sequence: n1 n2 ∗ n3 / . An error condition results if the divisor is zero or if the quotient falls outside of the range {-32,768..32,767}. See: "division, floored"
∗/ в стандарте Forth-79 (англ.)[править]
∗/ n1 n2 n3 -- n4 220 "times-divide" Multiply n1 by n2, divide the result by n3 and leave the quotient n4. n4 is rounded toward zero. The product of n1 times n2 is maintained as an intermediate 32-bit value for greater precision than the otherwise equivalent sequence: n1 n2 ∗ n3 /
∗/ в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
∗/ n1 n2 n3 --- n4 L0 Leave the ratio n4 = n1∗n2/n3 where all are signed numbers. Retention of an intermediate 31 bit product permits greater accuracy than would. be available with the sequence: n1 n2 ∗ n3 /
Реализация[править]
1398 ;#TimesSlash 1399 ; ×/ ( z y x −− n ) Поделить произведение z×y на x. n := Trunc [x1×x2/x3] 1400 ; Операция масштабирования −− умножение z на y с последующим делением на x. 1401 ; Промежуточный результат умножения z∗y содержит 14 десятичных разрядов. 1402 ; Присутствует ещё в Форте−79, но везде обозначается ∗/ 1403 LSSLA: .DB 2 1404 .DB 179 ; Символ умножения МК−161. 1405 .TEXT "/" ; ( множитель1 множитель2 делитель −− частное ) 1406 .DW LSLMOD ; ( a b c −− [a∗b/c] ) 1407 SSLA: .DW JSSLA 1408 JSSLA: RM3 M8 1 + MA 1 + MB M3 1409 KRMB KRMA ∗ KRM8 / KINT KMB 1410 KGOTO9
Реализация из SP-Forth 4.20:
: */ ( n1 n2 n3 -- n4 ) \ 94 \ Умножить n1 на n2, получить промежуточный двойной результат d. \ Разделить d на n3, получить частное n4. */MOD NIP ;
Советская реализация[править]
Слово ×/ в ФОРТ-ЕС и FORTH ИТЭФ называлось ∗/ и определялось через слово ∗/MOD
Вот описание и определение этого слова в ядре ФОРТ-ЕС:
*/ N1,N2,N3->N4 ЧАСТНОЕ ОТ ДЕЛЕНИЯ N1*N2 НА N3 18 Экран номер 18 ( 03.10.84 М* M/ * /MOD / MOD */MOD */) : */ ( N1,N2,N3->N4) */MOD SWAP DROP ;
Вот определение этого слова в FORTH ИТЭФ:
HEAD 202Q,'*',257Q,SSLA,$COL ; */ DW SSMOD,SWAP,DROP,SEMI
Ссылки[править]
- Исходный текст слова ×/ в Каллисто Классик 1.0
- Слово ∗/ (star-slash) в стандарте ANS Forth (англ.)
- Слово ∗/ (star-slash) в черновике Forth 200x (англ.)
- ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- The Philosophy of Fixed Point в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |