【问题标题】:A Solution for Returning Derivative = Infinity返回导数 = 无穷大的解决方案
【发布时间】:2016-02-23 00:15:52
【问题描述】:

这是一道数学题,但要尝试解决 C# 编程问题,所以我不确定这里是否是最好的地方。

在下面的代码中,我可以得到导数:

var x = 13.399E+153;
var d = ((1 + x) * (1 - x));
Console.WriteLine("d = {0:0}", d);
Console.ReadLine();

其中 13.399E+153; 9 重复出现。但是如果 x 变成:

var x = 14.00E+153;

我得到-Infinity。我已经做了一些研究,但不了解任何可能的解决方案。

网址:Mathematical function differentiation with C#? 还有:Limit of the derivative of a function as x goes to infinity 我确实理解为什么会发生这种情况:

If the limit of f(x) f(x) exists, there is a horizontal asymptote. 
Therefore as the function approaches infinity it becomes more linear and 
...thus the derivative approaches zero. 
.

我的问题是,例如,如果我将 Derivative 作为双精度返回,有什么解决方案可以防止它作为 Infinity 返回?我应该返回 1 还是零?

if (double.IsInfinity(Derivative))
{
return ?;
}

【问题讨论】:

  • 我应该返回 1 还是返回 0?它可以是 1、0 或 -1 或其他任何值。由您来处理返回值。您也可以从方法调用中返回 double.IsInfinity(Derivative)out 的导数。
  • 也许使用BigRational 而不仅仅是double。但是有人想知道您愿意采用哪个指数?
  • 42 是答案...我不知道您实际上希望通过返回一些有限值来实现什么。如果你真的需要,你必须在计算中明确支持“无穷大”的概念。

标签: c# calculus


【解决方案1】:

您会得到负无穷大的结果,因为结果的数学值小于可以使用 64 位浮点数表示的最小值。这是完全正常的,我看不出有什么需要修复的。

【讨论】:

  • 这是我已经知道的,它没有给我解决方案。我无法返回 Infinity - 或 + 我需要返回一个不会破坏数学的值。
  • 返回 Infinity 是如何破坏数学的,而返回其他东西不会?
  • 嗯,这真的是我已经问过的问题不是吗!
  • 不会返回任何有效的Double 值实际上会破坏数学,因为这实际上不是正确的答案?结果是-1,96E+308,但这并不在Double的范围内,所以考虑到存储数字数据的限制,负无穷实际上是你能得到的最好的。您会考虑使用Double 以外的其他数据类型吗?
  • @Chris,您必须接受浮点数不是实数。许多适用于实数的定理不适用于浮点。正无穷和负无穷是有效的浮点数,您可以像使用其他算法一样使用它们。
猜你喜欢
  • 2019-12-03
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多