为什么std :: assoc_laguerre的第二个参数是无符号的int?

时间:2019-02-04 23:18:03

标签: c++ c++17 c++-standard-library

在C ++ 17中,许多特殊功能被添加到标准库中。一种功能是associated Laguerre polynomials。第二个参数需要一个unsigned int,但是mathematical definition对于实数也有效。有什么理由只将其限制为非负整数吗?仅仅是因为当n和k都是正整数时二项式(n,k)更容易/更快/更简单地计算吗?

2 个答案:

答案 0 :(得分:4)

据我所知,C ++特殊函数之父的Walter E. Brown从未明确回答过您的Laguerre问题。然而,当人们读到what Brown did write,时,一种可能的动机就会变得清晰起来:

  

许多拟议的特殊函数都对部分或全部复平面以及部分或全部实数进行了定义。此外,这些函数中的某些函数甚至可以在实值参数上产生复杂的结果。本提案通过仅考虑实值参数和(相应地)实值结果来限制自己。

     

我们对替代方案的调查使我们意识到,特殊功能的复杂景观象征性地点缀着地雷。在提出建议时,我们重视一位受人尊敬的同事所说的“几位博士。论文将[或可能]由在复杂域上实现这套功能的努力而产生。” 这使我们认为,该领域的现有技术不足以作为标准化的基础,并且因此,这种标准化还为时过早。...

当然,您是在问实数而不是复杂的数,所以我不能证明原因是相同的,但是Abramowitz和Stegun(根据Brown的建议主要是基于他的建议)对整数的某些特殊函数提供了额外的支持。订购。奇怪的是,在我的Abramowitz和Stegun副本的第13章中,我看不到任何额外的支持,所以您有意思,不是吗?也许Brown只是保持谨慎,不希望一次投入太多到C ++标准库中,但是在我看来,在这种情况下不应该支持不支持浮点参数的原因显然并不立刻。 / p>

并不是说我会猜测布朗。

您可能已经知道,您可以使用Abramowitz和Stegun的第13章来获得想要的效果而不会带来太多麻烦。也许布朗本人会这样说:您可以轻松获得想要的效果。可以肯定的是,有人需要问布朗自己。

有关信息,先前链接的Brown提案明确将C ++的assoc_laguerre引用给Abramowitz和Stegun等人。 13.6.9。

总而言之,在C ++首次获得特殊功能支持时,请谨慎行事。图书馆不想前进得太快,太快。看来这很可能是您注意到的不足的主要原因。

答案 1 :(得分:3)

我知道一个事实,即人们对真实的和可感知的可实现性非常关注。此外,必须证明新的库功能。功能必须对多个社区有用。整数顺序assoc_laguerre是物理学家最常用的类型。有符号整数或实数阶可能被认为太抽象了。实际上,特殊的数学函数几乎没有将其纳入C ++ 17。实际上,我认为他们加入该游戏的部分原因是人们认为17是一个轻量级发行版,人们希望支持它。

众所周知,没有理由让order参数是无符号的,甚至没有必要。我放入libstdc ++(gcc)的基础实现具有真实顺序的alpha。实阶assoc_laguerre在例如正交规则中很有用。

除了放宽要签名的无符号整数之外,我可能建议对委员会进行真正的重载。

相关问题