Infinity — Константа


Каковы константы INFINITY в Java, действительно?

Недавно я столкнулся с константами в классах примитивного типа, таких как ******.POSITIVE_INFINITY и ******.NEGATIVE_INFINITY . В API он определяет первый как:

Постоянная, содержащая положительную бесконечность типа ******. Он равен значению, возвращаемому ******.longBitsTo******(0x7ff0000000000000L).

Другие имеют определения вдоль этих же строк.

У меня возникают проблемы с пониманием того, что эти константы на самом деле. Они фактически не могут быть или представлять положительные/отрицательные бесконечности, потому что система по своей природе является конечной. Это просто какая-то произвольная установка бит, которую, по мнению разработчиков Java, определит понятие бесконечности? Или у них действительно есть какая-то особая ценность? Если это просто произвольная строка бит, интерпретируемая как ****** , то есть ли там какое-то нормальное число, которое, если интерпретируется как ****** , вернет POSITIVE_INFINITY вместо того, что действительно ожидалось?

Простите меня, если ответ на это очевиден с учетом части ******.longBitsTo******(0x7ff0000000000000L) API. По правде говоря, это описание довольно загадочно для меня, и я не буду притворяться, что понимаю, что означают или представляют значения шестнадцатеричных значений.

Java-плавающая точка основана на стандартном стандарте IEEE 754 с плавающей запятой плавающей точкой, первая версия которой была выпущена примерно в 1985 году, поэтому она намного старше чем Java. Учитывая широко распространенную аппаратную реализацию IEEE 754 к моменту определения Java, у создателей Java не было выбора.

Каждое число с плавающей запятой IEEE 754 имеет три компонента: бит знака, показатель степени и мантисса. Упрощая значимость величины нормального числа:

где «**» представляет мощность.

Ведущий бит — это бит знака. В двойниках следующие 11 бит являются показателями.

Битовые шаблоны со всеми битами экспоненты зарезервированы для бесконечностей и NaN. Все нормальные числа имеют по крайней мере один нулевой бит в экспоненте. Две бесконечности представлены наличием всех битов экспоненты, а все биты мантиссы равны нулю. Ведущий знаковый бит отличает положительную и отрицательную бесконечность.

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

Обе бесконечности используются для представления двух вещей, фактически бесконечных результатов и результатов, которые слишком велики по абсолютной величине для представления в системе нормальных чисел, чисел, больших, чем ******.MAX_VALUE или меньше, чем -******.MAX_VALUE. 1.0/0.0 бесконечна. Так что 2 * ******.MAX_VALUE.

Есть несколько алгоритмов, которые могут быть упрощены, с меньшим количеством особых случаев, позволяя промежуточным результатам быть бесконечными в любом смысле. Это также позволяет, например, даже линию, параллельную оси y, чтобы иметь сохраняемый градиент, который можно использовать в вычислениях.

What are the INFINITY constants in Java, really?

I just recently ran across the constants in the primitive type wrapper classes like Double.POSITIVE_INFINITY and Double.NEGATIVE_INFINITY . In the API, it defines the first as:


A constant holding the positive infinity of type double. It is equal to the value returned by Double.longBitsToDouble(0x7ff0000000000000L).

The others have definitions along these same lines.

What I’m having trouble with is understanding what these constants actually are. They can’t actually be or represent positive/negative infinities, because the system is by nature finite. Is it just some arbitrary setting of bits which the Java creators deemed would define the concept of infinity? Or do these actually have some kind of special value? If it is just an arbitrary string of bits interpreted as a double , then is there some normal number out there that, when interpreted as a double will return POSITIVE_INFINITY instead of whatever value is actually expected?

Forgive me if the answer to this is obvious given the Double.longBitsToDouble(0x7ff0000000000000L) part of the API. Truthfully, that description is pretty arcane to me and I won’t pretend to understand what the hexadecimal values actually mean or represent.

3 Answers 3

Java floating point is based on the IEEE 754 binary floating point standard Floating Point Standard, the first version of which was issued in about 1985, so it is much older than Java. Given widespread hardware implementation of IEEE 754 by the time Java was being defined, the Java creators had little choice.

Each IEEE 754 floating point number has three components, a sign bit, an exponent, and a mantissa. Simplifying considerably, the magnitude of a normal number is:

where «**» represents power.

The leading bit is the sign bit. In doubles, the next 11 bits are the exponent.

The bit patterns with all the exponent bits on are reserved for infinities and NaNs. All normal numbers have at least one zero bit in the exponent. The two infinities are represented by having all exponent bits on, and all mantissa bits zero. The leading sign bit distinguishes positive and negative infinity.

Илон Маск рекомендует:  Iis репликация и кластеризация в iis

The choice of all exponent bits one for the special cases is not arbitrary. It is easier to chop off one of the extremes than to deal with a gap in the middle of a range of numbers, especially for hardware implementations. Taking the all bits off exponent for special cases would have prevented encoding zero with the all bits off pattern, and would have given the largest absolute magnitude values, the infinities, the smallest exponent, which would have also made hardware more complicated. The all bits on exponent is definitely the best choice for the infinities.

Welcome to Infinite Constant

Welcome to the World of Innovation. Infinite Constant enables your success by helping you to add value to your everyday Ideas.

SOFTWARE DEVELOPMENT

From smart customization of the pre-developed platforms to full-cycle custom software development along the client’s vision, Infinite Constant is an experienced development partner to deliver cost-effective and reliable custom software solutions that match your unique requirements. Contact us today!


MOBILE APPLICATION

Stay competitive by going mobile. We can deliver a single mobile app that is compatible across all platforms and devices, saving you time and money by simplifying the development process. Mobile apps are a powerful business tool to attract and retain your customers. Don’t wait, let us develop one for you today!

WEB APPLICATION

A modern website is an essential part of your business and vital to your company’s success. Let us create a dynamic, responsive, personalized solution for you. From entry-level web design to advanced database web systems, we can customize our services to match exactly what you are looking for. Contact us today!

ENTERPRISE APPLICATION

We help companies to support and refine high-level business processes that involve different departments, applications and data sources and requires straight-through processing, seamless data interchange and integrated business rules execution.

About Infinite Constant

Infinite Constant is a woman-owned small business located near Washington DC providing high quality IT products and services to small/medium size businesses and government agencies. Infinite Constant specializes in program managment and streamling complex logistics.

OUR GOALS

OUR SERVICES

MOBILE APP DESIGN

With various smartphones dominating the market today the requirement for mobile applications has become crucial for almost every business. Considering the importance of mobile apps, we provide exceptional mobile app design and development solutions that would complement any business or enterprise.

BUSINESS INTELLIGENCE

We understand the cirtical importance of Business Intelligence; the power of collecting and converting the unrefined data into meaningful and useful information that is delivered to the right people, at the right time, through ideal medium. This intelligence can streamline identifying and creating new opportunities, which when implemented can provide a competitive edge and long-term stability to the enterprise or businesses. With a considerable industry experience, as well as in-depth knowledge in various Microsoft technologies, our collaborative team of business strategy and business intelligence developers can provide any BI solution, irrespective of the nature of client’s industry.

LEGACY APPLICATION MODERNIZATION


We understand the client’s requirement of legacy application modernization. Businesses are starting to realize how much they suffer by not taking advantages exhibited by the latest technologies; hence, legacy application web conversion has become inevitable for businesses worldwide. With an immense experience in various Microsoft and Open Source technologies, our team of experienced and skilled developers can provide exceptional solution with legacy application conversions as well as legacy application modernization.

Our SEO specialists have a thorough knowledge of how the internet and search engine optimization work. We believe in providing ethical SEO solutions that help our client’s website gain considerable ranks in various search engines. We use paid SEO solutions and can find the right balance of different type of SEO solutions that best fit your business needs.

A modern website is an essential part of your business and vital to your company’s success. Let us create a dynamic, responsive, personalized solution for you. From entry-level web design to advanced database web systems, we can customize our services to match exactly what you are looking for.

CLOUD COMPUTING

We strive to stay in touch with the latest technologies. Together with our significant experience and in-depth knowledge on cloud computing infrastructures, we are able to deliver excellent cloud computing solutions that would offer business more choice, agility and flexibility

DIGITAL MARKETING

Our skilled and competent team of internet experts have in-depth knowledge on how internet and websites work. Using their skills not only they monitor the website traffic, but develop an optimization strategy to best optimize your web presence through data and website analytics techniques.

LOGOS & CORPORATE BRANDING

With talented and skilled logo designers having competency on software applications like Photoshop and Dreamweaver we can take an idea and turn it into an eminent brand that will spread uniformity across an entire enterprise. We will create from scratch or take the basis of your existing logo and transform it into an alluring, mesmerizing icon that can be used for your entire business, from website backgrounds to calling cards.

Double. Positive Infinity Поле

Определение

Представляет плюс бесконечность. Represents positive infinity. Это поле является константой. This field is constant.

Значение поля

Примеры

В следующем примере кода показано использование PositiveInfinity: The following code example illustrates the use of PositiveInfinity:


Комментарии

Значение этой константы является результатом деления положительного числа на ноль. The value of this constant is the result of dividing a positive number by zero.

Илон Маск рекомендует:  Что такое код localshrink

Эта константа возвращается, когда результат операции больше MaxValue. This constant is returned when the result of an operation is greater than MaxValue.

Чтобы определить, является ли значение положительным бесконечностью, используйте IsPositiveInfinity. Use IsPositiveInfinity to determine whether a value evaluates to positive infinity.

HLSL infinity constant not supported #672

Comments

Copy link Quote reply

gwihl >Jan 11, 2020 •

The infinity constant 1.#INF or -1.#INF is not supported in HLSL

This comment has been minimized.

Copy link Quote reply

johnkslang commented Jan 11, 2020 •

I’ll look at adding that syntax.

Note that isinf(f) is present, and might be faster to write your code as

I don’t know how flexible your code base is though.

This comment has been minimized.


Copy link Quote reply

gwihl >Jan 11, 2020

It would definitely be possible for that, but we’ve had some old driver bugs in the past where testing against isfinite would be incorrect :) We can definitely clean this up if needed, but mention it for completeness. Though, the helper functions won’t allow assigning +/-INF to a variable, like for bounding box expansion. Definitely a low priority issue, regardless.

Цель определения POSITIVE_INFINITY, NEGATIVE_INFINITY, констант NaN только для типов данных с плавающей точкой, но не для интегральных типов данных

Я хочу понять, почему константы POSITIVE_INFINITY и NEGATIVE_INFINITY определены только для типов данных с плавающей запятой ( float , double и их обертки),

но не для целых типов данных ( byte , short , int , long и их обертки). Это влияет на результат операции деления на разные типы данных. Например:

Для интегральных типов:

Для типов с плавающей запятой:

Целочисленные типы в Java используют либо двоичное без знака (для char ), либо двухзначное подписанное представление. Нет представления для «бесконечности» ни в одном из этих видов представлений. Например, с int есть 2 ^ 32 возможных значений, и все они представляют собой конечные числа.

( Integer.MIN_VALUE равно -2 31 Integer.MAX_VALUE равно 2 31 — 1, и если вы посчитаете их все. включая ноль. то получите 2 32 различных значения.)

Напротив, числа с плавающей точкой представлены с использованием двоичных представлений IEEE с двоичными числами, и у них есть стандартный способ представления значений как бесконечности, так и не числа.

Поэтому имеет смысл определить константы POSITIVE_INFINITY и NEGATIVE_INFINITY для типов с плавающей запятой, а определить их для целочисленных типов невозможно.

Если вы хотите знать, почему это так:

Целочисленные представления были разработаны/выбраны (давно!), Чтобы максимизировать скорость. Любые особые случаи (например, значения, зарезервированные для представления бесконечности и т.д.) Могут сделать целочисленное арифметическое оборудование более сложным и медленным. Если целью разработчика оборудования является целочисленное сложение за один такт, то усложнение сложения означает, что тактовая частота должна быть ниже. Это влияет на скорость всего процессора.

Обратная сторона такова:


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

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

Кроме того, есть преимущество, состоящее в том, что: значения INF и NaN позволяют операциям, которые их создают, выполняться без аппаратного исключения, но без «очистки плохих операций», как при целочисленном переполнении.

Обратите внимание, что два дополнения были использованы в работающем компьютере в 1949 году (EDSAC). Стандарт IEEE 754 появился в 1985 году.

Для чего это стоит, некоторые языки программирования знают о целочисленном переполнении; например Ада. Но они не делают этого с представлениями бесконечности и т.д. Вместо этого они генерируют исключение (или эквивалент), когда операция переполняется. Тем не менее, это добавляет снижение производительности, поскольку обнаружение переполнения обычно влечет за собой дополнительную инструкцию после каждой целочисленной арифметической инструкции для проверки бита состояния «переполнение». (То, как работают современные наборы инструкций. )

FreeMat v4.0 — Online Documentation

INF Infinity Constant


Usage

The next form takes a class name that can be either ‘double’

With a single parameter it generates a square matrix of inf s.

Alternatively, you can specify the dimensions of the array via

Finally, you can add a classname of either ‘single’ or ‘double’ .

Function Internals

Note that infinities are not preserved under type conversion to integer types (see the examples below).


HLSL infinity constant not supported #672

Comments

Copy link Quote reply

gwihl >Jan 11, 2020 •

The infinity constant 1.#INF or -1.#INF is not supported in HLSL

This comment has been minimized.

Copy link Quote reply

johnkslang commented Jan 11, 2020 •

I’ll look at adding that syntax.

Note that isinf(f) is present, and might be faster to write your code as

I don’t know how flexible your code base is though.

This comment has been minimized.

Copy link Quote reply

gwihl >Jan 11, 2020

It would definitely be possible for that, but we’ve had some old driver bugs in the past where testing against isfinite would be incorrect :) We can definitely clean this up if needed, but mention it for completeness. Though, the helper functions won’t allow assigning +/-INF to a variable, like for bounding box expansion. Definitely a low priority issue, regardless.


Каковы INFINITY константы в Java, на самом деле?

December 2020

42.6k раз

Я только недавно натыкался константы в примитивных классах типа обертки , как Double.POSITIVE_INFINITY и Double.NEGATIVE_INFINITY . В API, он определяет первое , как:

Постоянное проведение положительной бесконечности типа двойной. Оно равно значению, возвращаемому Double.longBitsToDouble (0x7ff0000000000000L).

Остальные имеют определения вдоль этих же линий.

Илон Маск рекомендует:  Что такое код isalnum isascii

Что у меня возникают проблемы с является понимание того, что эти константы на самом деле. Они не могут на самом деле быть или представляют собой положительные / отрицательные бесконечности, поскольку система по природе своего конечной. Является ли это просто некоторая произвольная установка битов, то Java создатели считают бы определить понятие бесконечности? Или это на самом деле имеют какую — то особую ценность? Если это будет просто произвольная строка битов интерпретируется как double , то есть какой — то нормальное число, что там, когда интерпретируется как double будет возвращать POSITIVE_INFINITY вместо того значения , которое на самом деле ожидали?

Прости меня , если ответ на этот вопрос очевиден , учитывая Double.longBitsToDouble(0x7ff0000000000000L) часть API. Правдиво, что описание довольно аркан для меня , и я не буду притворяться , чтобы понять , что шестнадцатеричные значения на самом деле означают или представляют.

3 ответы

Java с плавающей точкой на основе точки стандарта IEEE двоичных с плавающей 754 плавающей точкой стандарта , первая версия которого была выпущена в 1985 году , примерно, так что это намного старше , чем Java. Учитывая широкое внедрение аппаратных средств IEEE 754 к тому времени Java был быть определен, Java создатели не было особого выбора.

Каждый IEEE 754 с числом с плавающей точкой состоит из трех компонентов, знак бита, экспонента и мантисса. значительно упрощая, величина нормального числа является:

где «**» представляет власть.

Ведущий бит знаковый бит. В парном разряде, следующие 11 бит являются показателем.

Битовые шаблоны со всем экспонентом битами на зарезервированы для бесконечностей и NaNs. Все нормальные числа имеют по крайней мере один нулевой бит в показателе. Два бесконечностей представлены имеющие все биты экспоненты на, и все биты мантиссы нуля. Ведущий знаковый бит отличает положительную и отрицательную бесконечность.

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


Два бесконечностей оба используются для представления две вещей, на самом деле бесконечные результатов и результатов, которые слишком велики по абсолютной величине, чтобы представить в нормальной системе счисления, числа больше, чем Double.MAX_VALUE или меньше, чем -Double.MAX_VALUE. 1.0 / 0.0 бесконечно. Так 2 * Double.MAX_VALUE.

Есть некоторые алгоритмы, которые могут быть упрощены, с меньшим количеством специальных случаев, позволяя промежуточные результаты бесконечной, в любом смысле. Это позволяет, например, даже линию, параллельную оси ординат, чтобы иметь Storable градиент, который может быть использован в расчетах.

Каковы INFINITY константы в Java, на самом деле?

Я только недавно натыкался константы в примитивных классах типа обертки , как Double.POSITIVE_INFINITY и Double.NEGATIVE_INFINITY . В API, он определяет первое , как:

Постоянное проведение положительной бесконечности типа двойной. Оно равно значению, возвращаемому Double.longBitsToDouble (0x7ff0000000000000L).

Остальные имеют определения вдоль этих же линий.

Что у меня возникают проблемы с является понимание того, что эти константы на самом деле. Они не могут на самом деле быть или представляют собой положительные / отрицательные бесконечности, поскольку система по природе своего конечной. Является ли это просто некоторая произвольная установка битов, то Java создатели считают бы определить понятие бесконечности? Или это на самом деле имеют какую — то особую ценность? Если это будет просто произвольная строка битов интерпретируется как double , то есть какой — то нормальное число, что там, когда интерпретируется как double будет возвращать POSITIVE_INFINITY вместо того значения , которое на самом деле ожидали?

Прости меня , если ответ на этот вопрос очевиден , учитывая Double.longBitsToDouble(0x7ff0000000000000L) часть API. Правдиво, что описание довольно аркан для меня , и я не буду притворяться , чтобы понять , что шестнадцатеричные значения на самом деле означают или представляют.

Java с плавающей точкой на основе точки стандарта IEEE двоичных с плавающей 754 плавающей точкой стандарта , первая версия которого была выпущена в 1985 году , примерно, так что это намного старше , чем Java. Учитывая широкое внедрение аппаратных средств IEEE 754 к тому времени Java был быть определен, Java создатели не было особого выбора.

Каждый IEEE 754 с числом с плавающей точкой состоит из трех компонентов, знак бита, экспонента и мантисса. значительно упрощая, величина нормального числа является:

где «**» представляет власть.

Ведущий бит знаковый бит. В парном разряде, следующие 11 бит являются показателем.

Битовые шаблоны со всем экспонентом битами на зарезервированы для бесконечностей и NaNs. Все нормальные числа имеют по крайней мере один нулевой бит в показателе. Два бесконечностей представлены имеющие все биты экспоненты на, и все биты мантиссы нуля. Ведущий знаковый бит отличает положительную и отрицательную бесконечность.

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

Два бесконечностей оба используются для представления две вещей, на самом деле бесконечные результатов и результатов, которые слишком велики по абсолютной величине, чтобы представить в нормальной системе счисления, числа больше, чем Double.MAX_VALUE или меньше, чем -Double.MAX_VALUE. 1.0 / 0.0 бесконечно. Так 2 * Double.MAX_VALUE.

Есть некоторые алгоритмы, которые могут быть упрощены, с меньшим количеством специальных случаев, позволяя промежуточные результаты бесконечной, в любом смысле. Это позволяет, например, даже линию, параллельную оси ординат, чтобы иметь Storable градиент, который может быть использован в расчетах.

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL