Есть ли в Julia функция, эквивалентная функции SIGN(A,B)
в Fortran?
SIGN(A,B)
в Фортране возвращает значение A
со знаком B
. Если B > 0
, то результатом будет ABS(A)
, иначе это -ABS(A)
. Например, SIGN(10,-1)
даст вам -10
.
Обновлено: Проверьте ответ Богумила. Оказывается, в Base
есть функция, которая это делает.
Я не думаю, что в Base
есть функция, которая делает это. Однако добавление нового метода в sign
- простое решение:
Base.sign(a, b) = abs(a)*sign(b)
Вы можете использовать methods(sign)
, чтобы убедиться, что ваш новый метод не конфликтует с какими-либо существующими методами. В этом случае это точно не будет, поскольку все существующие методы имеют только один вход.
Поведение нового метода также будет согласовано со всеми существующими типами ввода, например, sign(missing, -1)
вернет missing
, а sign(true, false)
вернет false
.
В качестве альтернативы вы можете придумать собственное имя новой функции.
Возможно, ofsign(b, a)
был бы более понятным и, более того, совместимым с oftype(b, a)
.
У вас есть функция copysign
, которая делает то, что вы хотите.
Единственное отличие от того, что вы указали, заключается в том, что copysign(1.0, 0.0)
возвращает 1.0
, и вы указали, что это будет -1.0
(сказав B>0
), но я думаю, вы хотите, чтобы это оценивалось как 1.0
, как ведет себя copysign
. Верно?. Обратите внимание, что copysign(1.0, -0.0)
- это -1.0
.
В Фортране есть четыре различных случая для рассмотрения аргументов
sign
, а не только два упомянутых. Я расширюсь, если вы сочтете это необходимым.