28

そのため、Ruby には無限大を指定するためのトリックがあります。

1.0/0
=> Infinity

私はあなたがこのようなことができるPythonを信じています

float('inf')

これらは単なる例ですが、ほとんどの言語にはある程度の容量があると確信しています。この構造を現実の世界で実際に使用するのはいつですか? ブール式を使用するよりも範囲内で使用する方が良いのはなぜですか? 例えば

(0..1.0/0).include?(number) == (number >= 0) # True for all values of number
=> true

要約すると、私が探しているのは、Infinity を使用する実際の理由です。

編集: 実世界のコードを探しています。これは、あなたがそれを「使用できる」とき、実際に人々が使用したときであると言っても過言ではありません。

4

24 に答える 24

35

ダイクストラのアルゴリズムは通常、グラフの最初のエッジの重みとして無限を割り当てます。これは「無限大」である必要はなく、任意に定数である必要はありません、Java では通常 Double.Infinity を使用します。Rubyも同様に使用できると思います。

于 2008-12-20T00:40:24.123 に答える
35

頭のてっぺんから、最小値を検索するときの初期値として役立ちます。

例えば:

min = float('inf')

for x in somelist:
  if x<min: 
    min=x

min最初に最初の値に設定することを好みますsomelist

もちろん、Python では、ほとんどの場合、組み込み関数 min() を使用する必要があります。

于 2008-12-19T23:55:12.843 に答える
17

「なぜこの機能が存在するのか」という暗示があるようです。あなたの質問で。その理由は、Ruby と Python は、IEEE によって指定された浮動小数点形式で指定できる値の全範囲へのアクセスを提供しているだけだからです。

このページはそれをよく説明しているようです: http://steve.hollasch.net/cgindex/coding/ieeefloat.html

その結果、NaN (Not-a-number) 値と -0.0 を使用することもできますが、これらも実際にすぐに使用できるとは限りません。

于 2008-12-20T14:03:13.660 に答える
11

一部の物理計算では、同じ次数の不規則性 (つまり、無限数) を相互に正規化して、両方をキャンセルし、おおよその結果を得ることができます。

制限を扱う場合、 (infinity / infinity) -> 有限数に近づくような計算を行うことができます。言語が通常のゼロ除算エラーを上書きできると便利です。

于 2008-12-20T00:07:03.100 に答える
10

数学的アルゴリズムを実装するときにInfinityandを使用します。-Infinity

Ruby ではInfinity、任意の実数に対して< <の-Infinityように優れた比較プロパティがあります。たとえば、 を返し、 を意味するプロパティに拡張します。また、x > 0 の場合は、x < 0 の場合は、x が 0 の場合は 'NaN' (非数、つまり未定義) です。-InfinityxInfinityxMath.log(0)-Infinity0x > yMath.log(x) > Math.log(y)Infinity * xInfinity-Infinity

たとえば、いくつかの対数尤度比の計算の一部で、次のコードを使用します。がまたはANDがまたは-Infinityであっても、値を定義するために明示的に参照します。 k0nx01

Infinity = 1.0/0.0
def Similarity.log_l(k, n, x)
  unless x == 0 or x == 1
    k * Math.log(x.to_f) + (n-k) * Math.log(1.0-x)
  end
    -Infinity
  end
end
于 2008-12-20T01:29:23.387 に答える
8

物理シミュレーションで静的オブジェクトの質量と慣性を指定するために使用します。静的オブジェクトは、重力やその他のシミュレーション力の影響を本質的に受けません。

于 2008-12-29T23:05:55.570 に答える
8

アルファベータ剪定

于 2008-12-20T00:46:51.770 に答える
6

Ruby では、無限大を使用して遅延リストを実装できます。毎回 100 単位ずつ連続して大きくなる 200 から始まる N 個の数値が必要だとします。

Inf = 1.0 / 0.0
(200..Inf).step(100).take(N)

詳細はこちら: http://banisterfiend.wordpress.com/2009/10/02/wtf-infinite-ranges-in-ruby/

于 2009-12-11T03:08:47.543 に答える
4

カメラの焦点距離を表すために使用しましたが、Python で驚いたことに:

>>> float("inf") is float("inf")
False
>>> float("inf") == float("inf")
True

なぜだろう。

于 2009-07-31T17:49:14.030 に答える
3

ミニマックスアルゴリズムで使用しました。私が新しい動きを生成しているとき、最小プレーヤーがそのノードで勝った場合、ノードの値は -∞ です。逆に、最大プレイヤーが勝った場合、そのノードの値は +∞ になります。

また、ノード/ゲームの状態を生成してからいくつかのヒューリスティックを試す場合は、すべてのノード値を -∞/+∞ に設定することができます。これは理にかなっています。ヒューリスティックを実行しているときは、ノード値を簡単に設定できます。 :

node_val = -∞
node_val = max(heuristic1(node), node_val)
node_val = max(heuristic2(node), node_val)
node_val = max(heuristic2(node), node_val)
于 2008-12-22T13:56:57.557 に答える
3

Rails ' has_oneandに似た DSL で使用しましたhas_many

has 0..1 :author
has 0..INFINITY :tags

これにより、DSL で Kleene star や plus などの概念を簡単に表現できます。

于 2008-12-29T22:14:52.960 に答える
2

バイナリツリーを作成しようとして、特定の値が存在しない場合に最大値を設定するための「無限の」値を探しているため、これに遭遇しました。(単一の値だけでなく、値の範囲に基づいて選択しているため、ハッシュでさえ私の状況では機能しないことにすぐに気付きました。)

関係するすべての数値が正であると期待しているので、最小値は簡単です:0。ただし、最大値に何を期待できるかわからないので、上限をある種の無限大にしたいと思います。このように、私は物事を比較する必要がある「最大」を理解する必要はありません。

これは私が仕事で取り組んでいるプロジェクトなので、技術的には「現実世界の問題」です。まれなことかもしれませんが、多くの抽象化のように、必要なときに便利です。

また、これ(および他の例)が考案されていると言う人には、すべての抽象化がいくらか考案されていることを指摘しておきます。それはあなたがそれらを考案するときにそれらが有用であるという意味ではありません。

于 2010-04-13T20:18:39.107 に答える
2

片方または両方の端を開く必要がある Range オブジェクトがある場合に使用します

于 2008-12-20T01:28:57.833 に答える
2

範囲比較を処理する際に正と負の無限大に記号値を使用して、そうでなければ特別な処理が必要になるコーナー ケースを排除しました。

2 つの範囲 A=[a,b) と C=[c,d) が交差するか、一方が他方より大きいか、または一方が他方を含むか?

A > C iff a >= d
A < C iff b <= c
etc...

正の無限大と負の無限大の値がそれぞれ他のすべての値より大きいか小さいかを比較した場合、無制限の範囲に対して特別な処理を行う必要はありません。float と double は既にこれらの値を実装しているため、プラットフォームで最大/最小の値を見つけようとする代わりに、それらを使用することもできます。整数では、ハードウェアでサポートされていないため、「無限大」を使用するのはより困難です。

于 2009-01-07T22:04:54.557 に答える
1

グラフィックスで非常に広く使用されています。たとえば、実際のオブジェクトの一部ではない 3D イメージ内のピクセルは、無限遠としてマークされます。後で背景画像に置き換えることができるようにします。

于 2009-01-13T14:49:21.350 に答える
1

再接続試行の最大回数を指定できるネットワーク ライブラリを使用しています。私は永遠に再接続したいので:

my_connection = ConnectionLibrary(max_connection_attempts = float('inf'))

私の意見では、典型的な「-1 に設定して永久に再試行する」スタイルよりも明確です。これは文字通り「接続試行回数が無限大になるまで再試行する」と言っているからです。

于 2011-04-08T23:18:20.683 に答える
1

これを行う方法は他にもあると思いますが、Infinity を使用して、String から Float への変換で妥当な入力をチェックすることができます。少なくとも Java では、Float.isNaN() 静的メソッドは無限大の数値に対して false を返し、それらが有効な数値であることを示します。Float.POSITIVE_INFINITY および Float.NEGATIVE_INFINITY 定数をチェックすると、その問題が解決します。例えば:

// Some sample values to test our code with
String stringValues[] = {
  "-999999999999999999999999999999999999999999999",
  "12345",
  "999999999999999999999999999999999999999999999"
};

// Loop through each string representation
for (String stringValue : stringValues) {
  // Convert the string representation to a Float representation
  Float floatValue = Float.parseFloat(stringValue);

  System.out.println("String representation: " + stringValue);
  System.out.println("Result of isNaN: " + floatValue.isNaN());

  // Check the result for positive infinity, negative infinity, and
  // "normal" float numbers (within the defined range for Float values).
  if (floatValue == Float.POSITIVE_INFINITY) {
    System.out.println("That number is too big.");
  } else if (floatValue == Float.NEGATIVE_INFINITY) {
    System.out.println("That number is too small.");
  } else {
    System.out.println("That number is jussssst right.");
  }
}

サンプル出力:

文字列表現: -99999999999999999999999999999999999999999999
isNaN の結果: false
その数値は小さすぎます。

文字列表現: 12345
isNaNの結果: false
その数はまさにそうですね。

文字列表現: 99999999999999999999999999999999999999999999
isNaN の結果: false
その数値は大きすぎます。

于 2008-12-20T00:19:37.067 に答える
1

三角関数 (特に接線) が使用される問題領域で作業する場合、無限大が考えられる答えです。Trig は、グラフィックス アプリケーション、ゲーム、地理空間アプリケーション、および明白な数学アプリケーションで頻繁に使用されることになります。

于 2008-12-20T00:01:33.140 に答える
0

一部のプログラマーは、Infinity またはNaNs を使用して、変数がプログラム内で初期化または割り当てられていないことを示します。

于 2008-12-20T00:51:04.587 に答える
-1

以下を使用できます。

import decimal
decimal.Decimal("Infinity")

また:

from decimal import *
Decimal("Infinity")
于 2011-11-07T03:05:08.233 に答える
-1

仕分け用

「これらのアイテムを常に一番下に並べ替える」と言うために、並べ替え値として使用されるのを見てきました。

于 2014-08-22T14:04:23.103 に答える