им пытается решить для области под кривой примера 1 из: http://tutorial.math.lamar.edu/Classes/CalcI/AreaProblem.aspxплощадь под кривой программно в лестницу
Р (х) = х^3 - 5x^2 + 6x + 5 и х Оу п = 5
ответы говорит, что это: 25,12 , но я получаю немного меньше: 23,78880035448074
, что им я делаю не так ??
вот мой код:
import scala.math.BigDecimal.RoundingMode
def summation(low: Int, up: Int, coe: List[Int], ex: List[Int]) = {
def eva(coe: List[Int], ex: List[Int], x: Double) = {
(for (i <- 0 until coe.size) yield coe(i) * math.pow(x,ex(i))).sum
}
@annotation.tailrec
def build_points(del: Float, p: Int, xs : List[BigDecimal]): List[BigDecimal] = {
if(p <= 0) xs map { x => x.setScale(3, RoundingMode.HALF_EVEN)}
else build_points(del, p - 1, ((del * p):BigDecimal):: xs)
}
val sub = 5
val diff = (up - low).toFloat
val deltaX = diff/sub
val points = build_points(deltaX, sub, List(0.0f)); println(points)
val middle_points =
(for (i <- 0 until points.size - 1) yield (points(i) + points(i + 1))/2)
(for (elem <- middle_points) yield deltaX * eva(coe,ex,elem.toDouble)).sum
}
val coe = List(1,-5,6,5)
val exp = List(3,2,1,0)
print(summation(0,4,coe,exp))
Side Примечание: смотрите также http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Jubobs