Negate

From APL Wiki
Jump to navigation Jump to search
This page describes the monadic arithmetic function. For logical negation of a single argument, see Not. For dyadic subtraction (minus), see Subtract. For the negative sign of a number, see High minus.
-

Negate (-), or Minus, is a monadic scalar function which returns the additive inverse of its argument. It shares a glyph - with Subtract, which may also be called Minus, and may be considered a case of Subtract with a default left argument of zero.

The function Negate is distinguished from the syntactic negative sign, which is not a function but rather part of numeric literal notation. APL uses the high minus ¯ for the negative sign, but K uses the same symbol - as Minus, treating a - immediately preceding a numeric literal with no spaces as a negative sign.

Examples

Negating a vector of positive numbers. Note that the result array is displayed with a high minus on each element rather than a single Negate. The high minus applies to individual elements while Negate can only negate an entire array.

      - 1 2 3
¯1 ¯2 ¯3

Negate works on every type of number present, including complex numbers.

      - ¯2.5 1e20 3j¯4
2.5 ¯1E20 ¯3J4

Precision

Unlike Subtract, Negate cannot lose precision in floating-point calculations. This is because floating-point representations have a sign bit indicating whether a value is positive or negative; negating a number only changes the sign bit. Floating-point formats always use a sign bit because they distribute numbers exponentially. But only positive numbers can be represented as the result of an exponent, so an additional sign bit is needed.

For integers, which are always stored in two's complement format on modern computers, Negate forces a conversion to a higher type when passed the smallest possible value: for example, the range of 1-byte integers is from ¯128 to 127 inclusive, so -¯128 requires a 2-byte integer to store. Similarly, negating a Boolean array (that is, 1-bit unsigned values) forces it to be converted to an integer array. These conversions cannot cause a loss of precision in any normal APL because the result is a power of two, and is exactly representable in floating-point format. In K, which wraps on integer overflow, there is also no possibility of such a loss of precision because the minimum 4-byte integer is used as a null value, making the integer range symmetric.

See also

External links

Documentation


APL built-ins [edit]
Primitive functions
Scalar
Monadic ConjugateNegateSignumReciprocalMagnitudeExponentialNatural LogarithmFloorCeilingFactorialNotPi TimesRollTypeImaginarySquare Root
Dyadic AddSubtractTimesDivideResiduePowerLogarithmMinimumMaximumBinomialComparison functionsBoolean functions (And, Or, Nand, Nor) ∙ GCDLCMCircularComplexRoot
Non-Scalar
Structural ShapeReshapeTallyDepthRavelEnlistTableCatenateReverseRotateTransposeRazeMixSplitEncloseNestCut (K)PairLinkPartitioned EnclosePartition
Selection FirstPickTakeDropUniqueIdentitySelectReplicateExpandSet functions (IntersectionUnionWithout) ∙ Bracket indexingIndex
Selector Index generatorGradeIndex OfInterval IndexIndicesDeal
Computational MatchNot MatchMembershipFindNub SieveEncodeDecodeMatrix InverseMatrix DivideFormatExecuteMaterialiseRange
Primitive operators Monadic EachCommuteConstantReplicateExpandReduceWindowed ReduceScanOuter ProductKeyI-beamSpawnFunction axis
Dyadic BindCompositions (Compose, Reverse Compose, Beside, Atop, Over) ∙ Inner ProductPowerAtUnderRankDepthVariantStencilCut (J)
Quad names
Arrays Index originMigration levelAtomic vector
Functions Case convertUnicode convert
Operators SearchReplace