- expression stands for an expression that is a constant
- something stands for some language element that is not a constant expression

- ~ expression evaluates the expression that is a constant term to a floating-point constant. The evaluation may involve a rounding. If expression is not a constant, the evaluated constant is a faithful rounding of expression with precision bits, unless the expression is exactly 0 as a result of cancellation. In the latter case, a floating-point approximation of some (unknown) accuracy is returned.
- ~ does not do anything on all language elements that are not a constant expression. In other words, it behaves like the identity function on any type that is not a constant expression. It can hence be used in any place where one wants to be sure that expressions are simplified using floating-point computations to constants of a known precision, regardless of the type of actual language elements.
- ~ error evaluates to error and provokes a warning.
- ~ is a prefix operator not requiring parentheses. Its precedence is the same as for the unary + and - operators. It cannot be repeatedly used without brackets.

exp(5)

> print(~ exp(5));

148.41315910257660342111558004055227962348766759388

0

exp(x)

> print(~ "Hello");

Hello

exp((pi) * 5 * x)

> print(exp(x* ~(5*Pi)));

exp(x * 15.7079632679489661923132169163975144209858469968757)

148.41315910257660342111558004055227962348766759388 * x

> print( (~exp(5))*x);

148.41315910257660342111558004055227962348766759388 * x

> print(~(exp(5)*x));

exp(5) * x