This is a multi-part message in MIME format. ------=_NextPart_000_0008_01C0AB98.FE86CE00 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit I was asked to write down what I said at the dev day session about kinds. I have put this in the form of a proposal-like writeup which is attached. I hope this helps you undestand what I meant. ------=_NextPart_000_0008_01C0AB98.FE86CE00 Content-Type: text/plain; name="kinds.txt" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="kinds.txt" A proposal on kinds for Python This proposal aims to give the user optional control over the precision = and range of numeric computations so that a computation can be written = once and run anywhere with at least the desired precision and range. 1. Each Python compiler may define as many "kinds" of integer and = floating point numbers as it likes, except that it must propose at least one kind of integer corresponding = to the existing int, and must propose at least one kind of floating = point number, equivalent to the present float. These two required kinds = are called the default integer kind and the default float kind. The = range and precision of the default kinds are processor dependent, as at = present. Each kind other than the default is given a processor-dependent small = integer label called the kind number. 1. The builtin functions int and float are given an optional second = argument with default value None. int(x, kind=3DNone) float(x, kind=3DNone) If kind is None, these attempt to convert x to the default kind of = that type. If the kind is a small integer, the processor uses a = conversion routine to convert x to that kind, if that kind number is = defined on this processor. Otherwise, an exception is generated. Floating point numbers are truncated to less = precision if necessary but if they do not fit in the target's dynamic = range an exception is thrown. 2. Two new builtin functions are defined. They return kind numbers. selected_int_kind (n) -- return the number of a kind that will hold an integer number in = the range -10**n to 10**n. selected_float_kind (nd, n) -- return the number of a kind that will hold a floating-point = number with at least nd digits of precision and at least a dynamic range of 10**+/- n If no kind with the desired qualities exists an exception is thrown. 3. Modification to the literal parser ala Fortran 90. An integer or floating point literal may be followed by _name, where = name is a legal identifier. For example, 1.23e10_precise or 222_big. This is syntactic sugar for float(x, = name) or int(x, name) respectively. Example: single =3D selected_float_kind(6, 90) double =3D selected_float_kind(15, 300) x =3D 1.e100_double y =3D 1.e20_single z =3D 1.2 w =3D x * float(z, double) u =3D float(x, single) * y =20 Open questions: specify exactly what exception is thrown in each case, = and whether or not there is a standard kind number=20 or name for the existing long. ------=_NextPart_000_0008_01C0AB98.FE86CE00--
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4