Using math functions with SPARQL

GraphDB supports standard math functions to be used with SPARQL.

The following query summarizes all implemented math functions:

PREFIX ofn: <http://www.ontotext.com/sparql/functions/>

SELECT * {

  # acos
  # The arccosine function. The input is in the range[-1, +1]. The output is in the range [0, pi] radians.
  BIND (ofn:acos(0.5) AS ?acos)

  # asin
  # The arcsine function. The input is in the range[-1, +1]. The output is in the range [-pi/2, pi/2] radians.
  BIND (ofn:asin(0.5) AS ?asin)

  # atan
  # The arctangent function. The output is in the range (-pi/2, pi/2) radians.
  BIND (ofn:atan(1) AS ?atan)

  # atan2
  # The double-argument arctangent function (the angle component of the conversion from rectangular coordinates
  # to polar coordinates), see Math.atan2().
  # The output is in the range [-pi/2, pi/2] radians.
  BIND (ofn:atan2(1, 0) AS ?atan2)

  # cbrt
  # The cubic root function.
  BIND (ofn:cbrt(2) AS ?cbrt)

  # copySign
  # Returns the first floating-point argument with the sign of the second floating-point argument, see Math.copySign().
  BIND (ofn:copySign(2, -7.5) AS ?copySign)

  # cos
  # The cosine function. The argument is in radians.
  BIND (ofn:cos(1) AS ?cos)

  # cosh
  # The hyperbolic cosine function.
  BIND (ofn:cosh(1) AS ?cosh)

  # e
  # The E constant, the base of the natural logarithm.
  BIND (ofn:e() AS ?e)

  # exp
  # The exponent function, e^x.
  BIND (ofn:exp(2) AS ?exp)

  # expm1
  # The Math.expm1() function. Returns e^x - 1.
  BIND (ofn:expm1(3) AS ?expm1)

  # floorDiv
  # Returns the largest (closest to positive infinity) int value that is less than or equal to the algebraic quotient.
  # The arguments are implicitly cast to long.
  BIND (ofn:floorDiv(5, 2) AS ?floorDiv)

  # floorMod
  # Returns the floor modulus of the int arguments. The arguments are implicitly cast to long.
  BIND (ofn:floorMod(10, 3) AS ?floorMod)

  # getExponent
  # Returns the unbiased exponent used in the representation of a double.
  # This means that we take N from the binary representation of X: X = 1 * 2^N + {1|0} * 2^(N-1) + ... + {1|0} * 2^0,
  # i.e. the power of the highest non-zero bit of the binary form of X.
  BIND (ofn:getExponent(10) AS ?getExponent)

  # hypot
  # Returns sqrt(x^2 +y^2) without intermediate overflow or underflow.
  BIND (ofn:hypot(3, 4) AS ?hypot)

  # IEEEremainder
  # Computes the remainder operation on two arguments as prescribed by the IEEE 754 standard.
  BIND (ofn:IEEEremainder(3, 4) AS ?IEEEremainder)

  # log
  # The natural logarithm function.
  BIND (ofn:log(4) AS ?log)

  # log10
  # The common (decimal) logarithm function.
  BIND (ofn:log10(4) AS ?log10)

  # log1p
  # The Math.log1p() function.
  # Returns the natural logarithm of the sum of the argument and 1.
  BIND (ofn:log1p(4) AS ?log1p)

  # max
  # The greater of two numbers.
  BIND (ofn:max(3, 5) AS ?max)

  # min
  # The The smaller of two numbers.
  BIND (ofn:min(3, 5) AS ?min)

  # nextAfter
  # Returns the floating-point number adjacent to the first argument in the direction of the second argument.
  BIND (ofn:nextAfter(2, -7) AS ?nextAfter)

  # nextDown
  # Returns the floating-point value adjacent to d in the direction of negative infinity.
  BIND (ofn:nextDown(2) AS ?nextDown)

  # nextUp
  # Returns the floating-point value adjacent to d in the direction of positive infinity.
  BIND (ofn:nextUp(2) AS ?nextUp)

  # pi
  # The Pi constant.
  BIND (ofn:pi() AS ?pi)

  # pow
  # The power function.
  BIND (ofn:pow(2, 3) AS ?pow)

  # rint
  # Returns the double value that is closest in value to the argument and is equal to a mathematical integer.
  BIND (ofn:rint(2.51) AS ?rint)

  # scalb
  # Returns x × 2^scaleFactor rounded as if performed by a single correctly rounded floating-point multiply
  # to a member of the double value set.
  BIND (ofn:scalb(3, 3) AS ?scalb)

  # signum
  # Returns the signum function of the argument; zero if the argument is zero, 1.0 if the argument is greater than zero,
  # -1.0 if the argument is less than zero.
  BIND (ofn:signum(-5) AS ?signum)

  # sin
  # The sine function. The argument is in radians.
  BIND (ofn:sin(2) AS ?sin)

  # sinh
  # The hyperbolic sine function.
  BIND (ofn:sinh(2) AS ?sinh)

  # sqrt
  # The square root function.
  BIND (ofn:sqrt(2) AS ?sqrt)

  # tan
  # The tangent function. The argument is in radians.
  BIND (ofn:tan(1) AS ?tan)

  # tanh
  # The hyperbolic tangent function.
  BIND (ofn:tanh(1) AS ?tanh)

  # toDegrees
  # Converts an angle measured in radians to an approximately equivalent angle measured in degrees.
  BIND (ofn:toDegrees(1) AS ?toDegrees)

  # toRadians
  # Converts an angle measured in degrees to an approximately equivalent angle measured in radians.
  BIND (ofn:toRadians(1) AS ?toRadians)

  # ulp
  # Returns the size of an ulp of the argument.
  # An ulp, unit in the last place, of a double value is the positive distance between this floating-point value
  # and the double value next larger in magnitude. Note that for non-NaN x, ulp(-x) == ulp(x). See Math.ulp().
  BIND (ofn:ulp(1) AS ?ulp)

}

Note

All function arguments should be bound.

The result of the query evaluation is:

acos="1.0471975511965979"^^<http://www.w3.org/2001/XMLSchema#double>
asin="0.5235987755982989"^^<http://www.w3.org/2001/XMLSchema#double>
atan="0.7853981633974483"^^<http://www.w3.org/2001/XMLSchema#double>
atan2="1.5707963267948966"^^<http://www.w3.org/2001/XMLSchema#double>
cbrt="1.2599210498948732"^^<http://www.w3.org/2001/XMLSchema#double>
copySign="-2.0"^^<http://www.w3.org/2001/XMLSchema#double>
cos="0.5403023058681398"^^<http://www.w3.org/2001/XMLSchema#double>
cosh="1.543080634815244"^^<http://www.w3.org/2001/XMLSchema#double>
e="2.718281828459045"^^<http://www.w3.org/2001/XMLSchema#double>
exp="7.38905609893065"^^<http://www.w3.org/2001/XMLSchema#double>
expm1="19.085536923187668"^^<http://www.w3.org/2001/XMLSchema#double>
floorDiv="2.0"^^<http://www.w3.org/2001/XMLSchema#double>
floorMod="1.0"^^<http://www.w3.org/2001/XMLSchema#double>
getExponent="3.0"^^<http://www.w3.org/2001/XMLSchema#double>
hypot="5.0"^^<http://www.w3.org/2001/XMLSchema#double>
IEEEremainder="-1.0"^^<http://www.w3.org/2001/XMLSchema#double>
log10="0.6020599913279624"^^<http://www.w3.org/2001/XMLSchema#double>
log="1.3862943611198906"^^<http://www.w3.org/2001/XMLSchema#double>
log1p="1.6094379124341003"^^<http://www.w3.org/2001/XMLSchema#double>
max="5.0"^^<http://www.w3.org/2001/XMLSchema#double>
min="3.0"^^<http://www.w3.org/2001/XMLSchema#double>
nextAfter="1.9999999999999998"^^<http://www.w3.org/2001/XMLSchema#double>
nextDown="1.9999999999999998"^^<http://www.w3.org/2001/XMLSchema#double>
nextUp="2.0000000000000004"^^<http://www.w3.org/2001/XMLSchema#double>
pi="3.141592653589793"^^<http://www.w3.org/2001/XMLSchema#double>
pow="8.0"^^<http://www.w3.org/2001/XMLSchema#double>
rint="3.0"^^<http://www.w3.org/2001/XMLSchema#double>
scalb="24.0"^^<http://www.w3.org/2001/XMLSchema#double>
signum="-1.0"^^<http://www.w3.org/2001/XMLSchema#double>
sin="0.9092974268256817"^^<http://www.w3.org/2001/XMLSchema#double>
sinh="3.626860407847019"^^<http://www.w3.org/2001/XMLSchema#double>
sqrt="1.4142135623730951"^^<http://www.w3.org/2001/XMLSchema#double>
tan="1.5574077246549023"^^<http://www.w3.org/2001/XMLSchema#double>
tanh="0.7615941559557649"^^<http://www.w3.org/2001/XMLSchema#double>
toDegrees="57.29577951308232"^^<http://www.w3.org/2001/XMLSchema#double>
toRadians="0.017453292519943295"^^<http://www.w3.org/2001/XMLSchema#double>
ulp="2.220446049250313E-16"^^<http://www.w3.org/2001/XMLSchema#double>