当前位置: 首页 > 编程语言 > C#

何时使用NaN或+--无穷大?Share

时间:2023-04-11 11:13:07 C#

何时使用NaN或+/-无穷大?NaN、PositiveInfinity或NegativeInfinity对float和double有什么好处?我们什么时候应该使用或避免使用它们?如果存在这样的常量,为什么float.Parse("a")会抛出错误而不是返回float.NaN?NaN与null有何不同?为什么float类型甚至可以被零除?使用无穷大是因为它们是浮点数支持的算术系统的一部分。存在各种操作,例如除以零,其中无穷大是有用的结果并且在数学上是合理的。显然,没有直接的物理量可以是无限的(例如,你不能有无限的克数),但在物理过程的数学模型或人类用计算机建模的其他事物的某些方面,无穷大可能具有有用的价值。使用NaN是因为算术系统不完整。也就是说,有些运算的输入值无法用浮点数表示相应的数学结果。例如,sqrt(-1)是一个合法的数学运算,但结果是虚数i,不能用浮点数表示。因此,NaN用作占位符,表示该值已超过浮点数。NaN也可用于其他目的,例如标记未以其他方式初始化的数据,以帮助调试。float.Parse("a")抛出错误而不是返回NaN,因为它不是合法的操作。该表达式不会执行具有可表示数字之外的适当结果的数学运算。这是一个实际错误,因此会引发错误。它们不是你用的,因为它们是你需要注意的:doublehmm=1.0/0.0;双hmm2=-1.0/0.0;双hmm3=0.0/0.0;Console.WriteLine("1/0=={0}",嗯);Console.WriteLine("-1/0=={0}",hmm2);Console.WriteLine("0/0=={0}",hmm3);输出:1/0==Infinity-1/0==-Infinity0/0==NaN编辑:至于问题:如果有这样一个常量,为什么float.Parse("a")会抛出错误返回float.NaN?double.NaN实际上是一个数学定义——它被“定义”为0.0/0.0——“不是数字”这个词意味着像double.Parse("a")这样的东西也应该返回double.NaN,当然不是。为什么?我的直觉是因为无法判断您收到的double.NaN是垃圾数据的结果(在字符串的情况下)还是数字的实际定义,例如零除以零。所以,为了区分这两种情况,double.Parse("a")抛出一个Exception,我认为这更准确。如果存在这样的常量,为什么float.Parse("a")会抛出错误而不是返回float.NaN?因为您列出的替代方案均不适用于此处:PositiveInfinity和NegativeInfinity只是-即它们是1/0或-1/0等表达式的结果。NaN是0/0的结果-也就是说,其结果(通常)未明确定义且不产生数字的表达式。float.Parse("a")就是这样做的。诚然,它可以用NaN表示,但您无法区分用户输入无效浮点值(a)和有效浮点值(NaN)。然而,这不是一个非常强大的参数:NaN明确地是无效数字的占位符,因此可以想象它可以用来表示无效的用户输入。另一方面,还有其他类型具有Parse方法并且没有NaN值(例如int)。对于这些类型,Parse必须发出错误信号。使不同类型的Parse方法表现不同将是不一致的(因此是糟糕的API设计)。除算术结果外,无穷大的值可用于定义上下文的无限。示例:在没有大小限制的情况下,父WPF控件需要其子控件之一来测量自身;即availableSize为PositiveInfinity参考:MeasureOverride要解决NAN和无穷大,请使用以下内容:以上是C#学习教程:何时使用NaN或+/-无穷大?如果分享的内容对你有用,需要进一步了解C#学习教程,希望你多多关注——if(Double.IsNaN(YourValue)||Double.IsInfinity(YourValue)){YourValue=0;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

最新推荐
猜你喜欢