f# - 通过 F# 的泰勒级数

标签 f# functional-programming taylor-series

我正在尝试用 F# 编写泰勒级数。
看看我的代码

let rec iter a b f i = 
    if a > b then i;
    else f a (iter (a+1) b f i) 
let sum a b = iter a b (+) 0  // from 0
// e^x = 1 + x + (x^2)/2 + ... (x^n)/n! + ...
let fact n = iter 1 n (*) 1 // factorial
let pow x n = iter 1 n (fun n acc -> acc * x) 1 
let exp x =
             iter 0 x
                (fun n acc ->
                     acc + (pow x n) / float (fact n)) 0

在最后一行,我正在尝试 cast int fact n float ,但似乎我错了,因为此代码不可编译:(
我在做正确的算法吗?

我可以先调用我的代码吗?

最佳答案

代码无法编译,因为:

  • 你正试图除以一个整数 pow x n通过 float 。除法必须具有相同类型的操作数。
  • 您指定了错误类型的终端案例。文字 0是整数。如果您想要 float 零,请使用 0.0或缩写 0.

  • 尝试这个:
    let exp x =
             iter 0 x
                (fun n acc ->
                     acc + float (pow x n) / float (fact n)) 0.
    

    附言将来,请提供您得到的确切错误消息和/或意外结果。简单地说“不起作用”并不能很好地描述问题。

    关于f# - 通过 F# 的泰勒级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43077397/

    相关文章:

    f# - 为什么没有对未使用的 let 绑定(bind)发出警告?

    javascript - 使用函数式编程复制数组的元素

    math - TI-84 Basic 可以处理 n 阶导数吗?

    f# - F# 如何同时报告语法和语义错误?

    f# - 你能在 F# 中定义你自己的运算符吗?

    F# 惰性求值 vs 非惰性求值

    r - 名称对应于现有函数名称的函数参数的默认值

    .net - LINQ 表达式是在 F# 中操作数据的可接受的方式吗?

    c++ - 基于泰勒级数的基于模板的 Sin() 实现产生不正确的结果 C++

    c - C 编程中 cos x 和 sin x 的泰勒级数展开,不使用 math.h 且仅在 int main() 内部