我有一个关于Python的问题,你编写一个简单的脚本,打印从1到x的数字序列,其中x是无穷大.这意味着," x "可以是任何值.
例如,如果我们要打印一系列数字,它会将数字从1打印到"if"语句,表示停在数字"10"并且打印过程将停止.
在我当前的代码中,我正在使用这样的"for"循环:
for x in range(0,100):
print x
Run Code Online (Sandbox Code Playgroud)
我试图想象如何将"范围"中的"100"替换为其他可以让循环在不指定值的情况下连续打印序列的东西.任何帮助,将不胜感激.谢谢
我正在做一些实验,并且正在尝试这样做:
import math
for i in range(math.inf):
print(i)
Run Code Online (Sandbox Code Playgroud)
我希望它与此完全相同:
c = 0
while True:
print(c)
c += 1
Run Code Online (Sandbox Code Playgroud)
但它更像这样
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
然后,我尝试将转换inf为浮点数:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'float' object cannot be interpreted as an integer
Run Code Online (Sandbox Code Playgroud)
但这给了我这个错误,表明您不能将float infinity转换为整数。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: cannot convert float infinity …Run Code Online (Sandbox Code Playgroud) SetDestination()当我为 NavMeshAgent 和Debug.Log()每一帧设置无法到达的目标位置时NavMeshAgent.remainingDistance,我会获取Infinity一些路径,直到它开始返回浮点数(21.21864、21.0846、20.95449...),直到它尽可能接近目的地,这返回 0。
我不是数学家,但我认为除以无穷大要么是数学不好,要么至少是不切实际的.
我只花了半个小时调试我的JavaScript在Firefox中工作得很好,但在IE中给我一个错误.我终于意识到这是因为在某些情况下,我要求IE除以无穷大.
所以,我解决了这个问题,但我很好奇为什么Firefox可以做到这一点.不可否认,这可能更像是一个数学问题,而不是编程.;)
请考虑以下代码
let a = 5. / 0.
let b = sin a
let c = sqrt(-5.)
Run Code Online (Sandbox Code Playgroud)
它产生无限和NaN.在这两种情况下,我都想抛出一个异常(用于debuging目的).
我使用Visual Studio 2010.我将Debug/Exceptions .../Common Language Runtime Exceptions/System/System.ArithmeticException设置为"Thrown",但是在运行代码时,不会抛出任何异常.
知道为什么以及如何在NaN或Infinity上抛出异常?
无穷大不是任何标准数学中的数字,这将导致人们思考表达
Double.isNaN(Double.POSITIVE_INFINITY)
Run Code Online (Sandbox Code Playgroud)
应该评估true.但是,快速测试表明它的评估结果为false.仔细查看函数规范可以证实我的怀疑:"isNaN"不应被解释为"不是数字",而是"是非数字值".
我的问题是他们为什么这样实施呢?他们为什么不以这样的方式实现它false呢?它也会回归正或负无穷大?
在实践中,我现在使用的(Double.isNaN(x) || Double.isInfinite(x))方式比我只使用的方式更频繁Double.isNaN(x).因此,最好分别使用Double.isNaN(x)和(Double.isNaN(x) && !Double.isInfinite(x))替代.
即使现在更改它会让人感到困惑 - 以我在这里描述的方式实现和解释函数会不会更好?
还有哪些其他因素在这里起作用?
PS:请省略对被排除在中的法律的任何评论.;)
我设法找到了一个错误(可能不是错误,但麻烦重重),花了很长时间才能找到答案,并且可以使用REPL(NodeJS)复制它:
> o = {};
{}
> JSON.stringify(o)
'{}'
> o.n = 10
10
> JSON.stringify(o)
'{"n":10}'
> o.n = Infinity;
Infinity
> JSON.stringify(o)
'{"n":null}'
> null == Infinity
false
> null === Infinity
false
> typeof 10
'number'
> typeof Infinity
'number'
Run Code Online (Sandbox Code Playgroud)
当您将其Infinity放入JSON时null,尽管Infinity是一种number类型,它仍会变为。通常情况下,谁在乎,但是当-Infinity,NaN,0,并且Infinity都在你的应用程序(机器学习)的背景下特殊的意义,它能够传送特别号码为纯JSON是很重要的,而不诉诸馅和拆箱它变成每一次的字符串。
字符串填充需要对每次访问进行额外的类型检查,然后将开关案例字符串与所有特殊数字类型进行比较,然后将其重新分配为实际的特殊数字类型。一次还不错,每分钟40或50万亿次是您真正开始诅咒ECMA之神的地方。
我是否缺少某些东西,或者这仅仅是ECMA认为不是那么重要的事情之一?
对于双重或浮动,
1. -inf < inf == true
2. inf + inf == inf
3. -inf - inf == -inf
4. positive / 0.0 == inf
5. negative / 0.0 == -inf
6. any real number < inf == true
7. -inf < any real number == true
这个陈述是真的吗?
我们不知道(inf < inf),但我们可以肯定它不会抛出任何例外.
IEEE 754将1/0的结果指定为∞(无穷大).
但是,IEEE 754然后将0×∞的结果指定为NaN.
这感觉反直觉:为什么0×∞不是0?
我们可以认为1/0 =∞作为1/z的极限,因为z趋于零
我们可以认为0×∞= 0作为0×z的极限,因为z倾向于∞.
为什么IEEE标准遵循直觉1.而不是2.?