2013-05-06 13 views
6

dachte ich, das einfach sein sollte:Summe oder Produkt von Rationals mit Spire (wie eine scala.Numeric zu bekommen)

Ich denke, das ist nur eine Frage der richtigen Sachen in impliziten Umfang zu bringen. Aber was importiere ich?

ich, dass, um sehen ein RationalIsNumeric zu bekommen, habe ich so etwas wie dies zu tun:

import spire.math.Numeric._ 
implicit val err = new ApproximationContext(Rational(1, 192)) 
implicit val num = RationalIsNumeric 

Aber das gibt mir nur ein spire.math.Numeric. Also ich versuche, mit diesem zusätzlich:

import spire.math.compat._ 

Aber kein Glück ...

+0

OT: Wofür verwenden Sie den Turm? – Edmondo1984

+1

Ich mache rhythmische (musikalische) Berechnungen. Musikalische Dauern werden normalerweise als Rationale ausgedrückt, also müssen Sie in der Lage sein, diese zu zerlegen :) z. gegeben eine rhythmische Zelle mit relativen Dauern von 3, 2, 1 und einer Gesamtdauer von 1/2, berechnen Sie die individuellen Dauern, finden Sie einige Dehnungsfaktoren, die zu kleinen Nennern usw. führen. –

Antwort

8

dass alle gebraucht wird ist ein Beweis für spire.math.compat.numeric[Rational]:

import spire.math._ 

val seq = Vector(Rational(1, 4), Rational(3, 4)) 
implicit val num = compat.numeric[Rational] // ! 
seq.sum  // --> 1/1 
seq.product // --> 3/16 
6

Es ist auch erwähnenswert, dass Spire seine eigenen Versionen bietet der sum und product, die es qsum und qproduct ruft:

import spire.implicits._ 
import spire.math._ 

Vector(Rational(1,3), Rational(1,2)).qsum // 5/6 

Spire stellt alle Sammlungsmethoden mit q voran, um Konflikte mit den integrierten Scala-Methoden zu vermeiden. Hier ist eine (möglicherweise unvollständige) Liste:

  • qsum
  • qproduct
  • qnorm
  • qmin
  • qmax
  • qmean
  • qsorted
  • qsortedBy
  • qsortedWith
  • qselected
  • qshuffled
  • qsampled
  • qchoose

Leider habe ich ein bisschen spät dazu kam, ich bin neu zu Stackoverflow.