В каких контекстах языки программирования реально используют значение Infinity?

Вам нужно использовать __repr__. Это стандартная функция, такая как __init__. Например:

class Foobar():
    """This will create Foobar type object."""

    def __init__(self):
        print "Foobar object is created."

    def __repr__(self):
        return "Type what do you want to see here."

a = Foobar()

print a
28
задан 5 revs, 2 users 97% 11 April 2015 в 13:28
поделиться

19 ответов

Алгоритм Dijkstra обычно назначает бесконечность начальным весом ребра в графике. Это не делает , имеют , чтобы быть "бесконечностью", просто некоторые произвольно постоянные, но в Java я обычно использую Дважды. Бесконечность. Я предполагаю, что рубин мог использоваться так же.

34
ответ дан mmcdole 11 April 2015 в 13:28
поделиться
  • 1
    Можно ли отправить результат git branch -a в fallsudie? – CharlesB 11 May 2011 в 13:52

Некоторые программисты используют Бесконечность или NaN с, чтобы показать, что переменная никогда не инициализировалась или присваивалась в программе.

0
ответ дан James A. Rosen 11 April 2015 в 13:28
поделиться
  • 1
    @Dennis: результат здесь - то, что origin средства origin/HEAD, но мерзавец немного сомнителен о фактическом определении origin' s ГОЛОВА. Удаленные протоколы don' t на самом деле допускают передачу символьных судей, поэтому когда Вы клонируетесь, она эффективно просит у удаленного SHA1 ГОЛОВЫ, и затем выясняет то, на что касательно также указывает на ту фиксацию. (Если существуют несколько, это выбирает ведущее устройство сначала.) И удаленное обновление и такой don' t на самом деле касаются remotes' ГОЛОВЫ, таким образом, you' ре засунуло выполнение его вручную если Вы didn' t получают его, когда Вы клонировались. – Cascabel 12 May 2011 в 03:22

Я уверен, что существуют другие способы сделать это, но Вы могли использовать Бесконечность для проверки на разумные исходные данные в преобразовании Строки к плаванию. В Java, по крайней мере, Float.isNaN () статический метод возвратит false для чисел с бесконечной величиной, указывая, что они - верные номера, даже при том, что Ваша программа могла бы хотеть классифицировать их как недопустимых. Проверка по сравнению с Плаванием. POSITIVE_INFINITY и Плавание. Константы 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.");
  }
}

Демонстрационный Вывод:

Строковое представление:-999999999999999999999999999999999999999999999
Результат isNaN: ложь
, Что число является слишком маленьким.

Строковое представление: 12345
Результат isNaN: ложь
, Что число является jussssst правом.

Строковое представление: 999999999999999999999999999999999999999999999
Результат isNaN: ложь
, Что число является слишком большим.

1
ответ дан William Brendel 11 April 2015 в 13:28
поделиться
  • 1
    ... хорошо, или любой другой тип, реализовывая IDynamicMetaObjectProvider. – Jon Skeet 26 October 2010 в 14:38

Я использую его, когда у меня есть объект Диапазона, где один или оба конца должны быть, открывают

2
ответ дан 11 April 2015 в 13:28
поделиться
  • 1
    I' ve добавил другой пример. Если это не то, что Вам нужно тогда, что Вы имеете в виду под динамическим? – Andrew Bezzub 26 October 2010 в 15:07

Я использовал его в минимаксный алгоритм . Когда я генерирую новые перемещения, если минимальный игрок побеждает на том узле тогда, значение узла является-в€ћ. С другой стороны, если макс. игрок побеждает тогда, значение того узла является +в€ћ.

кроме того, если Вы генерируете состояния узлов/игры и затем испытываете несколько эвристики, можно установить все значения узла к-в€ћ / + в€ћ, который когда-либо имеет смысл и затем когда Вы выполняете эвристику его легкое для устанавливания значения узла:

node_val = -∞
node_val = max(heuristic1(node), node_val)
node_val = max(heuristic2(node), node_val)
node_val = max(heuristic2(node), node_val)
3
ответ дан Lolindrath 11 April 2015 в 13:28
поделиться

Когда работа в проблемной области, где аккуратный используется (особенно касательная), бесконечность является ответом, который может подойти. Аккуратные концы, используясь в большой степени в графических приложениях, играх и геопространственных приложениях, плюс очевидные математические приложения.

1
ответ дан John Meagher 11 April 2015 в 13:28
поделиться
  • 1
    Реализации ExpandoObject IDictionary<string,object>, таким образом, да можно рассматривать его как словарь для заполнения его. – stevemegson 26 October 2010 в 14:41
8
ответ дан pantsgolem 11 April 2015 в 13:28
поделиться
  • 1
    Я видел некоторый код Схемы прежде. Это похоже на всех китайско-японских мне.: | – Red Hyena 30 December 2009 в 18:22

В некоторых вычислениях физики можно нормализовать неисправности (т.е., бесконечные числа) того же порядка друг с другом, отменив их обоих и позволив приблизительному результату проникнуть.

, Когда Вы имеете дело с пределами, вычислениями как (бесконечность / бесконечность)-> приближение к конечному, число могло быть достигнуто. Для языка полезно иметь способность перезаписать регулярную ошибку деления на нуль.

11
ответ дан Eran Galperin 11 April 2015 в 13:28
поделиться
  • 1
    Что я пропускаю в C++, поскольку функциональный язык является легкой нотацией для того, чтобы приправить карри и композиция функций, оптимизация последнего вызова, закрытия, которые не становятся недопустимыми, как только их полученные переменные выходят из объема... – Giorgio 27 September 2012 в 17:28

Используйте Infinity и -Infinity, когда реализация математического алгоритма призывает к нему.

В Ruby, Infinity и -Infinity имеют хорошие сравнительные свойства так, чтобы -Infinity < x < Infinity для любого вещественного числа x. Например, Math.log(0) возвраты -Infinity, расширяясь на [1 111] свойство, что x > y подразумевает это Math.log(x) > Math.log(y). Кроме того, Infinity * x Infinity если x> 0, -Infinity если x < 0, и 'NaN' (не число; то есть, неопределенный), если x 0.

, Например, я использую следующий бит кода в части вычисления [приблизительно 1 124] логарифмические отношения правдоподобия . Я явно ссылочный -Infinity для определения значения, даже если k 0 или n И x, 0 или 1.

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
10
ответ дан Bkkbrad 11 April 2015 в 13:28
поделиться
  • 1
    как кто-то учащийся haskell, I' d интересоваться знанием, почему Вы предлагаете схему сначала. – Evan Carroll 30 December 2009 в 18:04

Кажется, существует подразумеваемое, "Почему эта функциональность даже существует?" в Вашем вопросе. И причина состоит в том, что Ruby и Python просто предоставляют доступ к полному спектру значений, которые можно определить в форме с плавающей точкой, как определено IEEE.

Эта страница, кажется, описывает его хорошо: http://steve.hollasch.net/cgindex/coding/ieeefloat.html

В результате у Вас может также быть NaN (Не-число) значения и-0.0, в то время как у Вас не может сразу быть реального использования для тех также.

17
ответ дан InfiniteVoid 11 April 2015 в 13:28
поделиться
  • 1
    @Javier: Я знаю it' s одна из тех эквивалентностей that' s не обязательно очень важный на практике (cf. Эквивалентность Тьюринга). Однако стандартный C++ на самом деле направляется в создание " closures" более прозрачный (с объектами, насколько я знаю под капотом. Даже с текущим языком функторы широко используются для выполнения тех же целей как " first-class" закрытия. – Derrick Turk 30 December 2009 в 20:31

От макушки это может быть полезно как начальное значение при поиске минимального значения.

, Например:

min = float('inf')

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

, Который я предпочитаю установке min первоначально к первому значению somelist

, Конечно, в Python, необходимо просто использовать минуту () встроенная функция в большинстве случаев.

34
ответ дан Triptych 11 April 2015 в 13:28
поделиться
  • 1
    Спасибо, Jacob! Я очистил пример немного. Это никогда не предназначалось для общедоступного дисплея; я только что считал Лямбду: Окончательный Императив один день и требуемый для попытки CPS в C++. Но тогда я видел этот вопрос и просто должен был совместно использовать... – Derrick Turk 30 December 2009 в 20:28

Я использовал символьные значения для положительной и отрицательной бесконечности имея дело со сравнениями диапазона для устранения угловых случаев, которые иначе потребовали бы специальной обработки:

, Учитывая два диапазона = [a, b) и C = [c, d) они пересекаются, каждый больше, чем другой, или каждый содержит другой?

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

, Если у Вас есть значения для положительной и отрицательной бесконечности, которые соответственно выдерживают сравнение больше, чем и меньше, чем все другие значения, Вы не должны делать никакой специальной обработки для открытых диапазонов. Начиная с плаваний и уже удваивает реализацию эти значения, Вы могли бы также использовать их вместо того, чтобы пытаться найти самые большие/самые маленькие значения на Вашей платформе. С целыми числами более трудно использовать "бесконечность", так как это не поддерживается аппаратными средствами.

2
ответ дан Eclipse 11 April 2015 в 13:28
поделиться
  • 1
    то, что я на самом деле пытаюсь сказать, является банкой, я установил ExpandoObject ' s имя свойства динамично? если я могу банка Вы, предоставьте пример? – ward87 26 October 2010 в 14:51

Я использовал его для случаев, где Вы хотите определить диапазоны предпочтений / позволенный.

, Например, в 37signals приложения Вы имеете как предел проекту номер

Infinity = 1 / 0.0
FREE = 0..1
BASIC = 0..5
PREMIUM = 0..Infinity

тогда, можно сделать проверки как

if PREMIUM.include? current_user.projects.count 
 # do something
end
5
ответ дан Michael Myers 11 April 2015 в 13:28
поделиться
  • 1
    @Jacon Johnson: да, первый взгляд нового синтаксиса (или отсутствие) может огорчить, но it' s действительно кожа глубоко. Реальная суть внизу (но некоторые сделаны легче отсутствием синтаксиса). Однако, there' s ничто волшебное о Схеме, просто выберите любой язык FP, который кажется доступным. – Javier 30 December 2009 в 19:33

Я использовал его в подобном DSL направляющим has_one и has_many:

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

Это облегчает выражать понятия как звезда Kleene и плюс в Вашем DSL.

3
ответ дан James A. Rosen 11 April 2015 в 13:28
поделиться
  • 1
    " В конце концов, закрытия являются плохим man' s возражает... и недостаток versa." я должен не согласиться. да, можно ли реализовать тот с помощью другой..., но что происходит, если Вы хотите повторно реализовать объекты на основе функторов? отвратительная путаница. и если Вы повторно реализуете закрытия сверху основанных на закрытии объектов? это распутывает себя (почти) к ' native' понятия. Таким образом я думаю, что закрытия далеки более соответствующий как ' primitives' чем объекты (и don' t запустили меня об основанных на классах объектах!) – Javier 30 December 2009 в 19:40

Я использую его для определения массы и инерции статического объекта на моделированиях физики. Статические объекты чрезвычайно незатронуты силой тяжести и другими силами моделирования.

8
ответ дан Nick Van Brunt 11 April 2015 в 13:28
поделиться
  • 1
    Хорошо. I' ll проверяют некоторый язык FP. Спасибо за ответ! – Red Hyena 30 December 2009 в 18:53

Это используется вполне экстенсивно в графике. Например, любой пиксель в 3D изображении, которое не является частью фактического объекта, отмечен как бесконечно далеко. Так, чтобы это могло позже быть заменено фоновым изображением.

1
ответ дан Megamug 11 April 2015 в 13:28
поделиться
  • 1
    да я знаю об этом. но я могу установить свойство ExpandoObjects от массива строк, например? – ward87 26 October 2010 в 14:38

I использовал его для представления расстояния фокусировки камеры и, к моему удивлению, в Python:

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

Интересно, почему это так.

4
ответ дан 28 November 2019 в 02:14
поделиться

In Ruby infinity можно использовать для реализации ленивых списков. Скажем, мне нужно N чисел, начинающихся с 200, которые каждый раз последовательно увеличиваются на 100 единиц:

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

Подробнее здесь: http://banisterfiend.wordpress.com/2009/10/02/wtf-infinite-ranges- in-ruby /

6
ответ дан 28 November 2019 в 02:14
поделиться

Я наткнулся на это, потому что я ищу «бесконечное» значение для максимального значения, если данное значение не существует, в попытке создать двоичное дерево. (Поскольку я выбираю на основе диапазона значений, а не только одного значения, я быстро понял, что даже хеш не сработает в моей ситуации.)

Поскольку я ожидаю, что все задействованные числа будут положительными, минимум - это просто: 0. Но поскольку я не знаю, чего ожидать от максимума, я бы хотел, чтобы верхняя граница была какой-то бесконечностью. Таким образом, мне не придется выяснять, с каким «максимумом» мне следует сравнивать.

Поскольку это проект, над которым я работаю на работе, технически это «проблема реального мира». Это может быть немного редко, но, как и многие абстракции, удобно, когда вам это нужно!

Также тем, кто говорит, что этот (и другие примеры) надуманы, я хотел бы указать, что все абстракции в некоторой степени надуманы; это не значит, что они полезны, когда вы их придумываете.

2
ответ дан 28 November 2019 в 02:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: