Thank you for the overview. It seems as though this community will also
look to IEEE-754 (the IEEE Standard for Floating-Point Arithmetic) for
Reals and also Infinity.

Should Python raise exceptions for Integers or [Complex] Fractions
involving Infinity,
or should Python assume that IEEE-754 is the canonical source of truth
about infinity?

IEEE-754 (2019), a closed standard, costs $100 for the PDF. I'll Ctrl-F for
'infinity' in the Wikipedia article:

https://en.wikipedia.org/wiki/IEEE_754 :

Exception handling
> The standard defines five exceptions, each of which returns a default
> value and has a corresponding status flag that is raised when the exception
> occurs.[e] No other exception handling is required, but additional
> non-default alternatives are recommended (see § Alternate exception
> handling).
> The five possible exceptions are:
> - Invalid operation: mathematically undefined, e.g., the square root of a
> negative number. By default, returns qNaN.
> - Division by zero: an operation on finite operands gives an exact
> infinite result, e.g., 1/0 or log(0). By default, returns ±infinity.
> - Overflow: a result is too large to be represented correctly (i.e., its
> exponent with an unbounded exponent range would be larger than emax). By
> default, returns ±infinity for the round-to-nearest modes (and follows the
> rounding rules for the directed rounding modes).
> - Underflow: a result is very small (outside the normal range) and is
> inexact. By default, returns a subnormal or zero (following the rounding
> rules).
> Inexact: the exact (i.e., unrounded) result is not representable exactly.
> By default, returns the correctly rounded result.


It appears that IEEE-754 implemented as per the binary spec could not
represent more complex assessments of inifnity:

As with IEEE 754-1985, the biased-exponent field is filled with all 1 bits
> to indicate either infinity (trailing significand field = 0) or a NaN
> (trailing significand field ≠ 0). For NaNs, quiet NaNs and signaling NaNs
> are distinguished by using the most significant bit of the trailing
> significand field exclusively,[d] and the payload is carried in the
> remaining bits.


json5 extends the JSON to support IEEE-754 +-inf (and +-0, which can also
be used to indicate 1D directionality sans magnitude).

Presumably, in the IEEE-754 view of the world,

from math import inf, nan
assert type(inf) == float
assert isinstance(inf, float)
assert float("inf") == inf

assert inf / inf == nan

assert inf / 0 == inf   # currently: ZeroDivisionError

assert (x/0) < ((x+1e-10)/0)   # where x>0 (x in Z+)  # Not possible;
Python is not a CAS


https://en.wikipedia.org/wiki/List_of_computer_algebra_systems doesn't have
a column for a "Surreal Numbers" or "non-Float handling of infinity".

https://en.wikipedia.org/wiki/Quantum_field_theory#Infinities_and_renormalization
deals with Infinities; which have curently been removed.

inf**inf




On Sun, Oct 11, 2020 at 9:07 PM Steven D'Aprano <st...@pearwood.info> wrote:

>
> On Sun, Oct 11, 2020 at 05:47:44PM -0400, Wes Turner wrote:
>
> > No, 2 times something is greater than something. Something over something
> > is 1.
>
> Define "something". Define "times" (multiplication). Define "greater
> than". Define "over" (division).
>
> And while you are at it, don't forget to define what you mean by
> "infinity". Do you mean potential infinity, actual infinity, Absolute
> infinity, aleph and beth numbers, omegas, or something else?
>
> https://www.cut-the-knot.org/WhatIs/WhatIsInfinity.shtml
>
> I am not being facetious. Getting your definitions right is vital if you
> wish to avoid error, and to avoid miscommunication. Change the
> definitions, and you change the meaning of everything said.
>
>
> (1) In the so-called "real numbers", there is no such thing as infinity.
> Since there is no such thing as infinity, infinity is not "something"
> that can be multiplied or divided, or added or subtracted. In the Real
> number system, there is no coherent way of doing arithmetic on
> "infinity". "Two times infinity" is meaningless.
>
> In the real numbers, there's no sensible way of doing arithmetic with
> "infinity" without leading to contradiction.
>
> Informally, infinity in the Real number system is a process that never
> completes, so doing twice as much doesn't take any longer.
>
>
> (2) Mathematicians have created at least two extensions to the Real
> number line which do include at least one infinity. It is possible to
> construct a coherent system that is not self-contradictory by including
> either a pair of plus and minus infinity, or just a single unsigned
> infinity:
>
> https://en.wikipedia.org/wiki/Extended_real_number_line
>
> https://en.wikipedia.org/wiki/Projectively_extended_real_line
>
> But in doing so, we have to give up certain "common sense" properties of
> finite numbers. For example, with only a single infinity, infinity is
> both greater than everything, and less than (more negative) than
> everything. We lose a coherent definition of "greater than".
>
> Even in the extended number lines, two times infinity is just infinity,
> and infinity divided by infinity is not coherent and cannot be defined
> in any sensible way.
>
> The IEEE-754 standard, and consequently Python floats, closely models
> the extended real number line.
>
>
> (3) In the *cardinal numbers*, there is something called infinity. Or
> rather, there are an *infinite number* of infinities, starting with the
> smallest, aleph-0, which represents the cardinality of the integers,
> i.e. what people usually mean when they think of infinity.
>
> Even in the cardinal numbers, two times infinity (aleph-0) is just
> aleph-0; however you might be pleased to know that two to the power of
> aleph-0 is aleph-1.
>
> Arithmetic with infinite cardinal numbers is strange.
>
> https://en.wikipedia.org/wiki/Hilbert's_paradox_of_the_Grand_Hotel
>
>
> (4) In other extensions of the real numbers, such as hyperreal and
> surreal numbers, we can work with various different kinds of
> infinities (and infinitesimals).
>
> For example, in the surreal numbers, we can do arithmetic on infinities,
> and you will be gratified, I am sure, that twice infinity is different
> from plain old infinity. In the language of the surreals:
>
>     2ω = ω + ω ≠ ω
>
> (That's an omega symbol, not ∞.)
>
> Unfortunately, the surreals are very different from the commonsense
> world of the real numbers we know and love. For starters, they form a
> tree, not a line. You cannot reach ω by starting at 0 and adding 1
> repeatedly. (ω is not the successor of any ordinal number.) Consequently
> there are other infinite numbers like ω-1 that are less than infinity
> but cannot be reached by counting upwards from zero but only by counting
> down from infinity.
>
> And of course, in the surreal numbers, there are an infinity of
> ever-growing infinities: not just ω+1 and 2ω but ω^2 and ω^ω and so on,
> all of which are "bigger than infinity".
>
> https://en.wikipedia.org/wiki/Surreal_number
>
> All very fascinating I am sure, but I don't think that we should be
> trying to emulate the surreal numbers as part of float.
>
>
>
> --
> Steve
> _______________________________________________
> Python-ideas mailing list -- python-ideas@python.org
> To unsubscribe send an email to python-ideas-le...@python.org
> https://mail.python.org/mailman3/lists/python-ideas.python.org/
> Message archived at
> https://mail.python.org/archives/list/python-ideas@python.org/message/MI4HG64LQGJ5TZYIOVNYNZKYVTEUHND4/
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/DP5F7QFPUKTR65DXS4XKENKU3AVBKNJQ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to