val = Math.exp($2).to_s
expr.gsub!(/#{Regexp.escape exp}/, "+#{val}")
end
-
+
while expr =~ /^\s*(dec2hex\s*(\d+))\s*\?*/
exp = $1
val = sprintf("%x", $2)
while expr =~ /(log\s*((\d+\.?\d*)|\d*\.?\d+))\s*/
exp = $1
res = $2
-
+
if res == 0
val = "Infinity"
else
val = Math.log(res).to_s
end
-
+
expr.gsub!(/#{Regexp.escape exp}/, "+#{val}")
end
expr.gsub!(/\bover /, "/ ")
expr.gsub!(/\bsquared/, "**2 ")
expr.gsub!(/\bcubed/, "**3 ")
- expr.gsub!(/\bto\s+(\d+)(r?st|nd|rd|th)?( power)?/, "**\1 ")
+ expr.gsub!(/\bto\s+(\d+)(r?st|nd|rd|th)?( power)?/, '**\1 ')
expr.gsub!(/\bpercent of/, "*0.01*")
expr.gsub!(/\bpercent/, "*0.01")
expr.gsub!(/\% of\b/, "*0.01*")
expr.gsub!(/\%/, "*0.01")
- expr.gsub!(/\bsquare root of (\d+)/, "\1 ** 0.5 ")
- expr.gsub!(/\bcubed? root of (\d+)/, "\1 **(1.0/3.0) ")
+ expr.gsub!(/\bsquare root of (\d+(\.\d+)?)/, '\1 ** 0.5 ')
+ expr.gsub!(/\bcubed? root of (\d+(\.\d+)?)/, '\1 **(1.0/3.0) ')
expr.gsub!(/ of /, " * ")
expr.gsub!(/(bit(-| )?)?xor(\'?e?d( with))?/, "^")
expr.gsub!(/(bit(-| )?)?or(\'?e?d( with))?/, "|")
expr.gsub!(/bit(-| )?and(\'?e?d( with))?/, "& ")
expr.gsub!(/(plus|and)/, "+")
+ debug expr
if (expr =~ /^\s*[-\d*+\s()\/^\.\|\&\*\!]+\s*$/ &&
expr !~ /^\s*\(?\d+\.?\d*\)?\s*$/ &&
expr !~ /^\s*$/ &&
answer = "a number with >30 digits..."
end
end
- m.reply answer
+ m.reply answer.to_s
rescue Exception => e
- error "couldn't evaluate expression \"#{m.params}\": #{e.inspect}"
+ error e
m.reply "illegal expression \"#{m.params}\""
return
end