Module: Dydx::Algebra::Set
Defined Under Namespace
Modules: Base
Classes: Cos, E, Log, Log10, Log2, Num, Pi, Sin, Tan
Instance Method Summary
collapse
Instance Method Details
#cos(x) ⇒ Object
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
|
# File 'lib/dydx/algebra/set.rb', line 291
def cos(x)
return Cos.new(x) unless x.multiple_of?(pi) && (x / pi).num?
radn = (x / pi)
loop do
break if radn < 2
radn -= 2
end
case radn
when 0 then 1
when _(1) / 2 then 0
when 1 then -1
when _(3) / 2 then 0
else Cos.new(x)
end
end
|
#e ⇒ Object
209
210
211
|
# File 'lib/dydx/algebra/set.rb', line 209
def e
$e ||= E.new
end
|
#e0 ⇒ Object
197
198
199
|
# File 'lib/dydx/algebra/set.rb', line 197
def e0
eval('$e0 ||= _(0)')
end
|
#e1 ⇒ Object
201
202
203
|
# File 'lib/dydx/algebra/set.rb', line 201
def e1
eval('$e1 ||= _(1)')
end
|
#log(formula) ⇒ Object
TODO: Method has too many lines. [13/10]
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
|
# File 'lib/dydx/algebra/set.rb', line 218
def log(formula)
if formula.formula?(:*)
f, g = formula.f, formula.g
log(f) + log(g)
elsif formula.formula?(:**)
f, g = formula.f, formula.g
g * log(f)
elsif formula.one?
e0
elsif formula.is_a?(E)
e1
else
Log.new(formula)
end
end
|
#log10(formula) ⇒ Object
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
|
# File 'lib/dydx/algebra/set.rb', line 253
def log10(formula)
if formula.formula?(:*)
f, g = formula.f, formula.g
log10(f) + log10(g)
elsif formula.formula?(:**)
f, g = formula.f, formula.g
g * log10(f)
elsif formula.one?
e0
elsif formula.is_a?(Num)
(formula.n == 10) ? e1 : log10(formula.n)
elsif formula == 10
e1
else
Log10.new(formula)
end
end
|
#log2(formula) ⇒ Object
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
# File 'lib/dydx/algebra/set.rb', line 234
def log2(formula)
if formula.formula?(:*)
f, g = formula.f, formula.g
log2(f) + log2(g)
elsif formula.formula?(:**)
f, g = formula.f, formula.g
g * log2(f)
elsif formula.one?
e0
elsif formula.is_a?(Num)
(formula.n == 2) ? e1 : log2(formula.n)
elsif formula == 2
e1
else
Log2.new(formula)
end
end
|
#oo ⇒ Object
213
214
215
|
# File 'lib/dydx/algebra/set.rb', line 213
def oo
Float::INFINITY
end
|
#pi ⇒ Object
205
206
207
|
# File 'lib/dydx/algebra/set.rb', line 205
def pi
$pi ||= Pi.new
end
|
#sin(x) ⇒ Object
TODO: We should negative num
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
|
# File 'lib/dydx/algebra/set.rb', line 273
def sin(x)
return Sin.new(x) unless x.multiple_of?(pi) && (x / pi).num?
radn = (x / pi)
loop do
break if radn < 2
radn -= 2
end
case radn
when 0 then 0
when _(1) / 2 then 1
when 1 then 0
when _(3) / 2 then -1
else Sin.new(x)
end
end
|
#tan(x) ⇒ Object
309
310
311
312
313
314
315
|
# File 'lib/dydx/algebra/set.rb', line 309
def tan(x)
if x == 0
0
else
Tan.new(x)
end
end
|