在我的一个模块中,我必须处理无限的概念.到目前为止,我一直在使用9**9**9正无穷大,这似乎运作良好,速度快,似乎是perl的内部用作无限.
但是,如果我的模块的用户决定使用其中一个大数字模块(例如use bigint;),然后他们使用inf或Math::BigInt->binf()表示无穷大,事情会有点冒险.
在某些地方它似乎工作正常,但在其他地方,比较应该是真的或应该是错误的最终错误的方式导致难以追踪错误.
我想支持无限的其他各种概念,它们可以使用普通的perl数和任意精度数.
但我也对性能表示担忧,因为我对无穷大的一些比较发生在紧密的内环中.显然,inffrom Math::BigInt会慢于9**9**9(由于在每次访问时调用绑定或重载方法).过去有没有人处理过这个问题?如果是这样,你的解决方案是什么?
我已经考虑过将自己的常量用于无穷大,定义如下:
use constant INF => if_any_bignum_modules_loaded()
? Math::BigInt->binf
: 9**9**9;
Run Code Online (Sandbox Code Playgroud)
然后向我的模块添加警告,首先应该加载任何bignum模块.这听起来合情合理吗?是否有可靠的实施if_any_bignum...,或者我应该自己推出?
快速思考; 有人认为O(∞)实际上是O(1)吗?
或者是表达O(∞)的唯一"正确"方式?
我正在创建一个应用程序来锁定相机焦点以进行视频录制.我想在没有用户手动调整焦点的情况下将焦点锁定到无限远.这可能吗?谢谢!
我在返回BigDecimal值的方法中编写算法,但现在计算的结果将是+或 - 无穷大.
而不是程序崩溃我想捕获异常并返回无穷大作为一个值,如果该方法返回双精度的方式.
例如Double.POSITIVE_INFINITY;
那么如何在BigDecimal中存储无穷大?还是有另一种方法吗?
public static BigDecimal myalgorithm(){
//code to store infinity in a BigDecimal
//return the BigDecimal holding infinity
}
Run Code Online (Sandbox Code Playgroud) 一些程序员认为理论CS课程(特别是我的学生)并没有多大意义.这是我发现非常相关的东西.让我为那些以前没见过的人制作碎片......
A)编程问题可以重写为有关语言的问题.
B)图灵机识别语言.
C)图灵机可以编码为(大)整数.
D)因此,可能的图灵机的数量是无穷无尽的
E)集合的幂集只是该集合的所有可能子集.
F)如果一个集合是无数的,它的功率集更大,即无数无限.
G)因此,如果一种语言是无限的,它就有无数无数的子集.这些都代表了一个问题.但是,只有很多图灵机可以用来解决这些问题.如果我们无法解决图灵机的问题,就无法解决.
结论......我们只能解决所有问题的无限小部分.
我的问题几乎就在这里......
每当我向学生提出这个论点时,他们就会陷入可数与无数无限之间.他们通常没有很强的数学背景,所以试图通过康托尔的对角化论证来解释他们的眼睛.
通常我试着给他们一些他们可以抓住的东西,比如这样......在计数数字线的任何部分放置一个有限的盒子,我们捕获有限数量的那些数字......但是在有限的数量上放置一个有限的盒子.实数行,我们捕获无限数量的实数.一种证据表明存在的实数比计数数字多.
最后我的问题......你如何向那些从未听过这个概念的人解释多层次无穷大的概念,可能不是数学倾向的?
最终编辑:我通过提出这个问题了解了很多,并且我很感激反馈.我浪费了太多时间试图找出"社区维基"究竟是什么.我了解到,有些人反对理论问题存在固有的偏见,我认为这只是一个错误,因为我们今天做的很多事情都是昨天的理论.但这种偏见是自然的,虽然我不同意理论的价值,但我对它没有任何问题,这有助于我理解我的学生来自哪里.我认为BS评论是不必要的.
我觉得这个问题根本不是一个民意调查或一个2009年的问题.那些只想要编码问题和编码答案的人可能想重新审视这个要求.我已将此问题移至社区维基,但强烈认为我不得不通过不当使用武力来这样做.
Haskell中的Peano自然数data Peano = Zero | Succ Peano被定义为非常奇怪的野兽:除了简单的自然和底值之外,其中还有一个"无限整数" inf = Succ inf.
还有其他Peano类型的居民吗?这个无限号码有名字吗?
在SQL中,如何选择列(数据类型number:) Infinity在Oracle 10g上等于的表的行?
select * from MYTABLE where MYCOLUMN = Infinity;
Run Code Online (Sandbox Code Playgroud) 我在VS2015 C#interactive中运行了以下代码片段并得到了一些非常奇怪的行为.
> double divide(double a, double b)
. {
. try
. {
. return a / b;
. }
. catch (DivideByZeroException exception)
. {
. throw new ArgumentException("Argument b must be non zero.", exception);
. }
. }
> divide(3,0)
Infinity
> 3 / 0
(1,1): error CS0020: Division by constant zero
> var b = 0;
> 3 / b
Attempted to divide by zero.
>
Run Code Online (Sandbox Code Playgroud)
为什么该方法返回无穷大而3/0引发错误并且3/b抛出格式化错误?我可以强制分裂抛出错误而不是返回无穷大吗?
如果我重新格式化方法
double divide(double a, double b)
{
if ( …Run Code Online (Sandbox Code Playgroud) 由于数学概念,我清楚地知道什么inf和nan实际上都是.但我真正感兴趣的是如何在编程语言中实现它们.
在Python中,我可以使用inf,并nan在算术和条件表达式,如下所示:
>>> nan = float('nan')
>>> inf = float('inf')
>>> 1 + inf
inf
>>> inf + inf
inf
>>> inf - inf
nan
Run Code Online (Sandbox Code Playgroud)
这将使我相信python内部对这两个数学量有一个特殊的保留位序列,没有其他数字可以假设这些位置.我的假设是否正确?能否请你在这方面给我启发?
如果我的假设是正确的,那么这可以很容易地解释:
>>> inf == inf
True
Run Code Online (Sandbox Code Playgroud)
但是,这不是:
>>> nan == nan
False
Run Code Online (Sandbox Code Playgroud)
显然,在数学中,这是正确的答案.但是python如何知道它应该False在这个实例中吐出来?
此外,python的实现与java或c ++的实现有何不同?
在Common Lisp中是否存在表示无穷大或无数字(NAN)的实现独立方式?它需要是双浮点数,并且具有正值和负值.在SBCL,结果
(apropos "INFINITY")
Run Code Online (Sandbox Code Playgroud)
包括
SB-EXT:DOUBLE-FLOAT-NEGATIVE-INFINITY (bound)
SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY (bound)
Run Code Online (Sandbox Code Playgroud)
但我需要它在所有实现中都可用.我有一个编写包的附录,可以在所有平台上运行,它需要表示无限和NAN.即使是其他图书馆的功能也足够了.
我iee-floats装了,现在它是我图书馆的一部分.我有一个功能,可以检测数字是否为NaN,以及检测数字是否为无穷大的函数; 我没有测试NaN,但是我的无限函数需要数字为双浮点数.SBCL的SB-EXT:DOUBLE-FLOAT-POSITIVE-INFINITY作品,但我需要它独立于实现.