# Functions and Operators

The `normalize-space()` function now returns a zero-length string if the argument is an empty sequence.

Casting from `xs:anyURI` to `xdt:untypedAtomic` is now allowed.

Integers of unlimited size are now supported when using the `xs:integer` data type. The full range of `xs:unsignedLong` is now supported.

Decimal division has been changed. The scale of the result (the number of digits after the decimal point) is now the maximum of (18, s1, s2) where s1 is the scale of the first operand and s2 is the scale of the second. An extension function decimal-divide() has been introduced to perform decimal division to a user-specified precision.

The `idiv` operator now allows operands of any numeric type.

A negative year is allowed in values of type `xs:dateTime`, `xs:gYear`, and `xs:gYearMonth`. (Negative years were allowed in `xs:date` in Saxon 7.9.1)

Division of one duration by another to produce a double is implemented.

Some operations on durations are now performed using long arithmetic rather than double arithmetic, which improves the precision of the result.

The `eq`, `gt`... family of operators now allow either operand to be an empty sequence, in which case the result is an empty sequence.

The `id()` function now accepts a second parameter, this is a node that identifies the document to be searched to find the required ID value. (The corresponding change to other functions such as `idref()`, `lang()`, and `key()` has not yet been made)

The `deep-equals()` function now compares attributes using their typed value rather than their string value.

If the fragment identifier included in a URI reference passed to the `document()` function is not a valid NCName, it is now ignored, and the function returns the document node. Previously an empty sequence would be returned.

Next