fix: Off by one error due to Belt.Array.makeBy

This commit is contained in:
NunoSempere 2022-09-05 09:37:48 +02:00
parent 6c04f9bff1
commit 2fa97c20f7

View File

@ -45,11 +45,11 @@ module ThreeNumbersToNumber = {
}
module FunctionToNumberZero = {
let make = (name, fn) =>
let make = (name, _) =>
FnDefinition.make(
~name,
~inputs=[FRTypeLambda],
~run=(_, inputs, _, _) => {
~run=(_, _, _, _) => {
Ok(0.0)->E.R2.fmap(Wrappers.evNumber)
},
(),
@ -77,7 +77,7 @@ module Internals = {
let applyFunctionAtZero = (aLambda, environment, reducer) =>
applyFunctionAtPoint(aLambda, internalZero, environment, reducer)
@dead let applyFunctionAtFloat = (aLambda, point, environment, reducer) =>
applyFunctionAtPoint(aLambda, ReducerInterface_InternalExpressionValue.IEvNumber(point))
applyFunctionAtPoint(aLambda, ReducerInterface_InternalExpressionValue.IEvNumber(point), environment, reducer)
// simplest integral function
let integrateFunctionBetweenWithIncrement = (
aLambda,
@ -103,7 +103,8 @@ module Internals = {
result
}
let xsLength = Js.Math.ceil((max -. min) /. increment)
let xs = Belt.Array.makeBy(xsLength, i => min +. Belt_Float.fromInt(i) *. increment)
let xs = Belt.Array.makeBy(xsLength + 1, i => min +. Belt_Float.fromInt(i) *. increment)
// makeBy goes from 0 to (n-1): <https://rescript-lang.org/docs/manual/latest/api/belt/array#makeby>
let ysOptions = Belt.Array.map(xs, x => applyFunctionAtFloatToFloatOption(x))
let okYs = E.A.R.filterOk(ysOptions)
let result = switch E.A.length(ysOptions) == E.A.length(okYs) {
@ -145,7 +146,8 @@ module Internals = {
let xsLengthCandidate = Belt.Float.toInt(Js.Math.round(numIntervals))
let xsLength = xsLengthCandidate > 0 ? xsLengthCandidate : 1
let increment = (max -. min) /. Belt.Int.toFloat(xsLength)
let xs = Belt.Array.makeBy(xsLength, i => min +. Belt_Float.fromInt(i) *. increment)
let xs = Belt.Array.makeBy(xsLength +1, i => min +. Belt_Float.fromInt(i) *. increment)
// makeBy goes from 0 to (n-1): <https://rescript-lang.org/docs/manual/latest/api/belt/array#makeby>
let ysOptions = Belt.Array.map(xs, x => applyFunctionAtFloatToFloatOption(x))
let okYs = E.A.R.filterOk(ysOptions)
let result = switch E.A.length(ysOptions) == E.A.length(okYs) {