Functional programming 部分应用于预计算中间结果
对于下面的四次公式,我有多个Functional programming 部分应用于预计算中间结果,functional-programming,ocaml,Functional Programming,Ocaml,对于下面的四次公式,我有多个a,但固定了b和c 我希望编写一个部分应用程序函数,它可以高效执行,即我的函数不会重新计算固定值(因为b和c) 这是我的解决办法 设rbc=z=b*。b在乐趣中a->(.b+.sqrt(z-.4.0*.a*.c))/(a*.2.0) 我想这个解决方案可以奏效,但我不确定它是否足够有效。我刚把b^2固定好,因为我看到其他部件都是a 有人能给我一个更好的解决方案吗?是的,这是处理当前情况的正确方法。没有多大帮助(只要它达到您所需的精度)。您可能还需要将4*c移出 le
a
,但固定了b
和c
我希望编写一个部分应用程序
函数,它可以高效执行,即我的函数不会重新计算固定值(因为b
和c
)
这是我的解决办法
设rbc=z=b*。b在乐趣中a->(.b+.sqrt(z-.4.0*.a*.c))/(a*.2.0)代码>
我想这个解决方案可以奏效,但我不确定它是否足够有效。我刚把b^2
固定好,因为我看到其他部件都是a
有人能给我一个更好的解决方案吗?是的,这是处理当前情况的正确方法。没有多大帮助(只要它达到您所需的精度)。您可能还需要将4*c
移出
let r b c = let z = b *. b and c4 = 4.0 *. c in
fun a -> (-.b +. sqrt (z-.a*.c4))/.(a*.2.0);;
您可能希望查看编译后的代码,以查看浮动是否已解除绑定,但在这种情况下可能不会有多大改进。let rbc=let b2=-.b/。2.0和z=b2*。b2在fun a->(b2+.sqrt(z-.a*.c))/.a
中注意,现在的算术运算非常便宜,除非您需要多次计算公式,否则增益几乎不明显。最昂贵的操作是sqrt
,您无论如何都必须进行计算。在这种情况下,我更喜欢代码的可读性,而不是小优化。