Float64Val returns the nearest Go float64 value of x and whether the result is exact;
x must be numeric or an Unknown, but not Complex. For values too small (too close to 0)
to represent as float64, Float64Val silently underflows to 0. The result sign always
matches the sign of x, even for 0.
If x is Unknown, the result is (0, false).

Sign returns -1, 0, or 1 depending on whether x < 0, x == 0, or x > 0;
x must be numeric or Unknown. For complex values x, the sign is 0 if x == 0,
otherwise it is != 0. If x is Unknown, the result is 1.

Uint64Val returns the Go uint64 value of x and whether the result is exact;
x must be an Int or an Unknown. If the result is not exact, its value is undefined.
If x is Unknown, the result is (0, false).

type Value interface {
// Kind returns the value kind.Kind() Kind// String returns a short, quoted (human-readable) form of the value.
// For numeric values, the result may be an approximation;
// for String values the result may be a shortened string.
// Use ExactString for a string representing a value exactly.String() string// ExactString returns an exact, quoted (human-readable) form of the value.
// If the Value is of Kind String, use StringVal to obtain the unquoted string.ExactString() string// contains filtered or unexported methods
}

BinaryOp returns the result of the binary expression x op y.
The operation must be defined for the operands. If one of the
operands is Unknown, the result is Unknown.
BinaryOp doesn't handle comparisons or shifts; use Compare
or Shift instead.

To force integer division of Int operands, use op == token.QUO_ASSIGN
instead of token.QUO; the result is guaranteed to be Int in this case.
Division by zero leads to a run-time panic.

Denom returns the denominator of x; x must be Int, Float, or Unknown.
If x is Unknown, or if it is too large or small to represent as a
fraction, the result is Unknown. Otherwise the result is an Int >= 1.

MakeFromLiteral returns the corresponding integer, floating-point,
imaginary, character, or string value for a Go literal string. The
tok value must be one of token.INT, token.FLOAT, token.IMAG,
token.CHAR, or token.STRING. The final argument must be zero.
If the literal string syntax is invalid, the result is an Unknown.

Num returns the numerator of x; x must be Int, Float, or Unknown.
If x is Unknown, or if it is too large or small to represent as a
fraction, the result is Unknown. Otherwise the result is an Int
with the same sign as x.

UnaryOp returns the result of the unary expression op y.
The operation must be defined for the operand.
If prec > 0 it specifies the ^ (xor) result size in bits.
If y is Unknown, the result is Unknown.