2013-05-06 25 views
6

Tôi nghĩ điều này nên được thẳng về phía trước:Sum hoặc sản phẩm của rationals với Spire (làm thế nào để có được một scala.Numeric)

Tôi đoán đây chỉ là một câu hỏi đưa những thứ ngay vào phạm vi tiềm ẩn. Nhưng tôi phải nhập gì?

tôi có thể thấy rằng để có được một RationalIsNumeric, tôi phải làm một cái gì đó như thế này:

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

Nhưng điều đó chỉ mang lại cho tôi một spire.math.Numeric. Vì vậy, tôi cố gắng với bổ sung này:

import spire.math.compat._ 

Nhưng không may mắn ...

+0

OT: bạn đang sử dụng chóp gì? – Edmondo1984

+1

Tôi đang tính toán nhịp nhàng (âm nhạc). Thời lượng âm nhạc thường được thể hiện là hợp lý, vì vậy bạn cần phải có khả năng mangle những người :) Ví dụ: cho một tế bào nhịp nhàng với thời lượng tương đối là 3, 2, 1 và tổng thời lượng là 1/2, tính toán thời lượng riêng lẻ, tìm một số yếu tố kéo dài dẫn đến mẫu số nhỏ, v.v. –

Trả lời

8

Tất cả những gì cần thiết là bằng chứng về 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

Nó cũng đáng chú ý là Spire cung cấp các phiên bản riêng của mình sumproduct gọi là qsumqproduct:

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

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

Spire tiền tố tất cả các phương pháp thu thập của nó với q để tránh xung đột với các phương thức tích hợp của Scala. Dưới đây là một (có thể không đầy đủ) danh sách:

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

Xin lỗi tôi đến hơi muộn này, tôi mới để StackOverflow.

Các vấn đề liên quan