maths 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -35,7 +35,7 @@ maths> 20 * 3
35
35
  maths> 8 - 4
36
36
  = 4
37
37
  maths> 4.4 + 3.2
38
- = 7.6000000000000005
38
+ = 7.6
39
39
  ```
40
40
 
41
41
  Maths also supports assigning variables:
@@ -64,6 +64,30 @@ maths> exit
64
64
 
65
65
  Variables persist in maths between runs of the command, so feel free to exit and reopen maths all you want - those variables will stick around between executions.
66
66
 
67
+ ## Tell Us More, Bob
68
+
69
+ Maths can do all sorts of great math!
70
+
71
+ Absolute Values!
72
+
73
+ ```
74
+ maths> |-5|
75
+ = 5
76
+ ```
77
+
78
+ Square Roots!
79
+
80
+ ```
81
+ maths> sqrt 25
82
+ = 5
83
+ ```
84
+
85
+ Exponents!
86
+ ```
87
+ maths> 2 ^ 4
88
+ = 16
89
+ ```
90
+
67
91
  Maths is still pretty new - I hacked the original version together on a flight, and it's still maturing. If you'd like to see something added, let me know in the [issue tracker](https://github.com/commondream/maths/issues).
68
92
 
69
93
  ## Contributing
data/bin/maths CHANGED
@@ -32,7 +32,11 @@ while command = Readline.readline(prompt, true)
32
32
  begin
33
33
  result = parser.parse(command)
34
34
 
35
- if result.frac == 0
35
+ if result.nil?
36
+ output = "Undefined"
37
+ elsif !result.is_a?(Numeric)
38
+ output = result.to_s
39
+ elsif result.frac == 0
36
40
  output = result.to_i.to_s
37
41
  else
38
42
  output = result.to_s("F")
data/lib/maths/brain.rb CHANGED
@@ -12,7 +12,13 @@ module Maths
12
12
 
13
13
  # Public: Looks up data
14
14
  def self.lookup(variable)
15
- BigDecimal.new(read[variable])
15
+ value = read[variable]
16
+
17
+ if value.nil?
18
+ nil
19
+ else
20
+ BigDecimal.new(read[variable])
21
+ end
16
22
  end
17
23
 
18
24
  # Public: The file we're using to store our memories
data/lib/maths/calc.y CHANGED
@@ -2,7 +2,8 @@
2
2
  class Calculator
3
3
  prechigh
4
4
  nonassoc UMINUS
5
- left '*' '/' '%'
5
+ nonassoc FUNC
6
+ left '^' '*' '/' '%'
6
7
  left '+' '-'
7
8
  right "="
8
9
  preclow
@@ -16,12 +17,14 @@ rule
16
17
  | exp '*' exp { result *= val[2] }
17
18
  | exp '/' exp { result /= val[2] }
18
19
  | exp '%' exp { result %= val[2] }
20
+ | exp '^' exp { result = result.power(val[2])}
19
21
  | '(' exp ')' { result = val[1] }
20
22
  | '|' exp '|' { result = val[1].abs }
21
23
  | '-' NUMBER =UMINUS { result = -val[1] }
22
24
  | VARIABLE { result = Brain.lookup(val[0])}
23
25
  | NUMBER
24
26
  | FLOAT
27
+ | FUNC exp { result = Maths::Functions.exec(val[0], val[1]) }
25
28
 
26
29
  assign: VARIABLE "=" exp { result = Brain.assign(val[0], val[2]) }
27
30
  | VARIABLE "=" assign { result = Brain.assign(val[0], val[2]) }
@@ -39,7 +42,11 @@ module Maths
39
42
  case str
40
43
  when /\A\s+/
41
44
  when /\A[A-Za-z]+[0-9]*/
42
- @q.push [:VARIABLE, $&]
45
+ if Maths::Functions::FUNCTIONS.has_key?($&)
46
+ @q.push [:FUNC, $&]
47
+ else
48
+ @q.push [:VARIABLE, $&]
49
+ end
43
50
  when /\A\d+\.\d+/
44
51
  @q.push [:FLOAT, BigDecimal.new($&)]
45
52
  when /\A\d+/
@@ -0,0 +1,11 @@
1
+ module Maths
2
+ class Functions
3
+ FUNCTIONS = {
4
+ "sqrt" => Proc.new { |val| BigDecimal.new(Math.sqrt(val).to_s) }
5
+ }
6
+
7
+ def self.exec(function, value)
8
+ FUNCTIONS[function].call(value)
9
+ end
10
+ end
11
+ end
data/lib/maths/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Maths
2
- VERSION = "0.0.2"
3
- end
2
+ VERSION = "0.0.3"
3
+ end
data/lib/maths.rb CHANGED
@@ -6,4 +6,5 @@ require "bigdecimal"
6
6
 
7
7
  require "maths/version"
8
8
  require "maths/calc"
9
- require "maths/brain"
9
+ require "maths/brain"
10
+ require "maths/functions"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maths
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -44,6 +44,7 @@ files:
44
44
  - lib/maths.rb
45
45
  - lib/maths/brain.rb
46
46
  - lib/maths/calc.y
47
+ - lib/maths/functions.rb
47
48
  - lib/maths/version.rb
48
49
  - maths.gemspec
49
50
  homepage: http://github.com/commondream/maths