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
,您无论如何都必须进行计算。在这种情况下,我更喜欢代码的可读性,而不是小优化。