F# F中以2为底的对数#

F# F中以2为底的对数#,f#,F#,F#语言具有计算自然对数的函数log和计算以10为底对数的函数log10 计算F#中以2为底的对数的最佳方法是什么?你可以简单地使用“b的a-对数”=ln(b)/ln(a),也就是说,x的2-对数是ln(x)/ln(2) …如果ln是自然对数或log10,则任何一个对数都有效。使用System.Math.Log(number,base) 例如: open System Math.Log(32., 2.) val it : float = 5.0 +1当然,这比我的解决方案更容易。我不知道这个功

F#语言具有计算自然对数的函数log和计算以10为底对数的函数log10


计算F#中以2为底的对数的最佳方法是什么?

你可以简单地使用“b的a-对数”=ln(b)/ln(a),也就是说,x的2-对数是ln(x)/ln(2)

…如果
ln
是自然对数或log10,则任何一个对数都有效。

使用
System.Math.Log(number,base)

例如:

open System
Math.Log(32., 2.)
val it : float = 5.0

+1当然,这比我的解决方案更容易。我不知道这个功能:)@JoachimIsaksson,事实上,Log(double,double)的MS实现完全符合你在答案中所说的。我希望我能接受你和古斯塔沃的答案,因为它们都有效。然而,我选择这个答案是因为它只依赖于FSharp.Core(在FSharp.Core.dll中)中的例程,而Gustavo的引入了对系统的依赖,以及可能的对数替代定义。@Jonnyboots不用担心,但“对系统的依赖”是什么意思?Gustavo,不管出于什么原因,f#语言团队选择在FSharp.Core.dll中实现对数函数,而不是在System()中使用标准的.Net函数。我不知道为什么,也许我所知道的代码都是一样的。由于f#是一种开放式语言,可能有人会在某些操作系统(如Mono)上执行不同的实现。@Jonny他们这样做是为了提供在某些类型上多态的现成函数(而不是方法),数学方法通过重载实现相同的功能,但也有一些方法(如Log)具有不同的重载(不仅仅是不同的类型),因此在某些情况下,您必须使用所需的重载调用数学方法。关于依赖性,您可以在不同的操作系统上实现F#,但这并不意味着您必须更改系统命名空间的公共接口。
open System
Math.Log(32., 2.)
val it : float = 5.0