round
в "цифровой" пакет является [ * [: <. 0.5 + %~
. Вы можете использовать его следующим образом:
require 'numeric'
(0.01&round)&.+. _1.5j_4.6 4e_16j2 2j4e_16
_1.5j_4.6 0j2 2
код, указанный в вопросе, исправленное использовать |
вместо +
является (**|)&.+.
и использует побочный работает над числами, чтобы закруглить их. Вы принимаете каждую часть комплексного номера (&.+.
) и умножаете (*
) на его значение (|
) по его знаку (*
). Вы могли бы добиться такого же эффекта, добавляя и вычитая константу из своего номера с чем-то вроде 10j10 -~ 10j10 + ]
.
[ * [: <. 0.5 + %~
не использует побочные продукты, а скорее округляет число до нужной точности. %~
делит y
на x
, так что если вы округляете 0.3579 до двух знаков после запятой, указанную x
из 0,01, ваш первый шаг - 35.79. Затем добавьте 0,5 (0.5 +
) и возьмите слово ([: <.
), что совпадает с округлением до нулевых мест (35,79 + 0,5 = 36,29, пол которого составляет 36). Последний шаг - умножить на x
([ *
), чтобы отменить то, что было сделано с помощью %~
.
Хотя заманчиво создать комплексную версию round
с [ * [: <. 0.5j0.5 + %~
, используя <.
на комплексное число производит complex floor, который, вероятно, не то, что вы после этого.Если вы ожидаете, что мнимые и реальные компоненты будут закруглены независимо, перейдите к применению round
под номером +.
. Я думаю, что следующий дает вам вкус того, как комплекс пол отличается берет слово каждой части комплексного числа:
<. 0.7 0j0.7 0.6j0.7 0.7j0.6
0 0 0j1 1
Это помогает объяснить следующее:
1 ([ * [: <. 0.5j0.5 + %~) 0.2 0j0.2 0.1j0.2 0.2j0.1
1 0j1 0j1 1
«Округление» 0.2
до 1
поймал меня на страже, но это потому, что 0.2 + 0.5i0.5
= 0.7i0.5
и <. 07j0.5
имеет комплексный этаж 1
. То же самое касается 0j0.2
«округление» до 0j1
.
Если вы просто хотите, ближайший номер, где обе части комплексного числа являются целыми числами, вы можете использовать ([: <. 0.5 + ])&.+.
:
([: <. 0.5 + ])&.+. 0.2 0j0.2 0.1j0.2 0.2j0.1
0 0 0 0
([: <. 0.5 + ])&.+. 0.7 0j0.7 0.6j0.7 0.7j0.6
1 0j1 1j1 1j1
Изменить это '(** |) & +'.. Рассказ: '+' комплексно сопряжен; не то, что нужно; '|' является абсолютной величиной, вероятно, тем, что было предназначено. –