{
"sqrt" => Proc.new { |val| BigDecimal.new(Math.sqrt(val).to_s) },
"cbrt" => Proc.new { |val| BigDecimal.new(Math.cbrt(val).to_s) },
"sin" => Proc.new { |val| BigDecimal.new(Math.sin(val).to_s) },
"asin" => Proc.new { |val| BigDecimal.new(Math.sin(val).to_s) },
"sinh" => Proc.new { |val| BigDecimal.new(Math.sinh(val).to_s) },
"asinh" => Proc.new { |val| BigDecimal.new(Math.asinh(val).to_s) },
"cos" => Proc.new { |val| BigDecimal.new(Math.cos(val).to_s) },
"acos" => Proc.new { |val| BigDecimal.new(Math.acos(val).to_s) },
"cosh" => Proc.new { |val| BigDecimal.new(Math.cosh(val).to_s) },
"acosh" => Proc.new { |val| BigDecimal.new(Math.acosh(val).to_s) },
"tan" => Proc.new { |val| BigDecimal.new(Math.tan(val).to_s) },
"atan" => Proc.new { |val| BigDecimal.new(Math.atan(val).to_s) },
"tanh" => Proc.new { |val| BigDecimal.new(Math.tanh(val).to_s) },
"atanh" => Proc.new { |val| BigDecimal.new(Math.atanh(val).to_s) },
"ln" => Proc.new { |val| BigDecimal.new(Math.log(val).to_s) },
"log" => Proc.new { |val| BigDecimal.new(Math.log10(val).to_s) },
"log2" => Proc.new { |val| BigDecimal.new(Math.log2(val).to_s) },
"floor" => Proc.new { |val| BigDecimal.new(val.floor.to_s) },
"ceil" => Proc.new { |val| BigDecimal.new(val.ceil.to_s) },
"ceiling" => Proc.new { |val| BigDecimal.new(val.ceil.to_s) },
"round" => Proc.new { |val| BigDecimal.new(val.round.to_s) }
}