class BinomialTheoremError extends Error {
readonly _tag = 'BinomialTheoremError'
}
const binomialTheorem = (
a: number,
b: number,
n: number,
): Effect.Effect<number, BinomialTheoremError, never> => {
const factorial = (num: number): number => {
let result = 1
for (let i = 2; i <= num; i++) {
result *= i
}
return result
}
let result = 0
try {
for (let k = 0; k <= n; k++) {
result +=
(factorial(n) / (factorial(k) * factorial(n - k))) *
a ** (n - k) *
b ** k
}
} catch (error) {
return Effect.fail(new BinomialTheoremError('error in binomial theorem'))
}
return Effect.succeed(result)
}
const a = 0.23
const b = 0.92
const n = 1_00_000
const compute = Effect.gen(function* (_) {
const result = yield* _(binomialTheorem(a, b, n))
return result
})
Effect.runPromise(compute.pipe(Effect.timeout('1 seconds'))).then(
console.log,
console.error,
)
class BinomialTheoremError extends Error {
readonly _tag = 'BinomialTheoremError'
}
const binomialTheorem = (
a: number,
b: number,
n: number,
): Effect.Effect<number, BinomialTheoremError, never> => {
const factorial = (num: number): number => {
let result = 1
for (let i = 2; i <= num; i++) {
result *= i
}
return result
}
let result = 0
try {
for (let k = 0; k <= n; k++) {
result +=
(factorial(n) / (factorial(k) * factorial(n - k))) *
a ** (n - k) *
b ** k
}
} catch (error) {
return Effect.fail(new BinomialTheoremError('error in binomial theorem'))
}
return Effect.succeed(result)
}
const a = 0.23
const b = 0.92
const n = 1_00_000
const compute = Effect.gen(function* (_) {
const result = yield* _(binomialTheorem(a, b, n))
return result
})
Effect.runPromise(compute.pipe(Effect.timeout('1 seconds'))).then(
console.log,
console.error,
)