Decimal32
   HOME

TheInfoList



OR:

In
computing Computing is any goal-oriented activity requiring, benefiting from, or creating computer, computing machinery. It includes the study and experimentation of algorithmic processes, and the development of both computer hardware, hardware and softw ...
, decimal32 is a decimal floating-point
computer numbering format A computer number format is the internal representation of numeric values in digital device hardware and software, such as in programmable computers and calculators. Numerical values are stored as groupings of bits, such as bytes and words. The e ...
that occupies 4 bytes (32 bits) in computer memory.


Purpose and use

Like the binary16 and
binary32 Single-precision floating-point format (sometimes called FP32 or float32) is a computer number format, usually occupying 32 bits in computer memory; it represents a wide dynamic range of numeric values by using a floating radix point. A floati ...
formats, decimal32 uses less space than the actually most common format binary64.


Range and precision

decimal32 supports 'normal' values, which can have 7 digit precision from up to , plus 'subnormal' values with ramp-down relative precision down to (one digit),
signed zero Signed zero is zero with an associated sign. In ordinary arithmetic, the number 0 does not have a sign, so that −0, +0 and 0 are equivalent. However, in computing, some number representations allow for the existence of two zeros, often denoted by ...
s, signed infinities and NaN (Not a Number). The encoding is somewhat complex, see below. The binary format with the same bit-size,
binary32 Single-precision floating-point format (sometimes called FP32 or float32) is a computer number format, usually occupying 32 bits in computer memory; it represents a wide dynamic range of numeric values by using a floating radix point. A floati ...
, has an approximate range from subnormal-minimum over normal-minimum with full 24-bit precision: to maximum .


Encoding of decimal32 values

decimal32 values are encoded in a 'not normalized' near to 'scientific format', with combining some bits of the exponent with the leading bits of the significand in a 'combination field'. Besides the special cases infinities and NaNs there are four points relevant to understand the encoding of decimal32. * BID vs. DPD encoding, inary Integer ecimal using a positive integer value for the significand, software centric and designed by Intel(r), vs. ensely Packed ecimal encoding for all except the first digit of the significand, hardware centric and promoted by IBM(r), differences see below. Both alternatives provide exactly the same range of representable numbers: up to 7 digits of significand and possible exponent values. IEEE 754 allows these two different encodings, without a concept to denote which is used, for instance in a situation where decimal32 values are communicated between systems. CAUTION!: Be aware that transferring binary data between systems using different encodings will mostly produce valid decimal32 numbers, but with different value. Prefer data exchange in íntegral or ASCII 'triplets' for sign, exponent and significand. * In contrast to the binaryxxx formats the significands of decimal datatypes are not 'normalized' (the leading digit(s) are allowed to be "0"), and thus most values with less than 7
significant digits Significant figures, also referred to as significant digits, are specific digits within a number that is written in positional notation that carry both reliability and necessity in conveying a particular quantity. When presenting the outcom ...
have multiple possible representations. all have the value . These sets of representations for a same value are called
cohort Cohort or cohortes may refer to: Cohort Sociological * Cohort (military unit), the basic tactical unit of a Roman legion * Cohort (educational group), a group of students working together through the same academic curriculum Scientific * Cohort ...
s'','' the different members can be used to denote how many digits of the value are known precisely. * The encodings combine two bits of the exponent with the leading 3 to 4 bits of the significand in a 'combination field', different for 'big' vs. 'small' significands. That enables bigger precision and range, in trade-off that some simple functions like sort and compare, very frequently used in coding, do not work on the bit pattern but require computations to extract exponent and significand and then try to obtain an exponent aligned representation. This effort is partly balanced by saving the effort for normalization, but contributes to the slower performance of the decimal datatypes. Beware: BID and DPD use different bits of the combination field for that, see below. * Different understanding of significand as integer vs. fraction, and acc. different bias to apply for the exponent (for decimal32 what is stored in bits can be decoded as base to the power of 'stored value for the exponent minus bias of 95' times significand understood as (note: radix dot after first digit, significand fractional), or base to the power of 'stored value for the exponent minus bias of 101' times significand understood as (note: no radix dot, significand integral), both produce the same result 019 version of IEEE 754 in clause 3.3, page 18 Both applies to BID as well as DPD encoding. For decimalxxx datatypes the second view is more common, while for binaryxxx datatypes the first, the biases are different for each datatype.) In all cases for decimal32, the value represented is : , with the ''significand'' understood as positive integer. Alternatively it can be understood as with the ''significand'' digits understood as , note the radix dot making it a fraction. For ±Infinity, besides the sign bit, all the remaining bits are ignored (i.e., both the exponent and significand fields have no effect). For NaNs the sign bit has no meaning in the standard, and is ignored. Therefore, signed and unsigned NaNs are equivalent, even though some programs will show NaNs as signed. The bit m5 determines whether the NaN is quiet (0) or signaling (1). The bits of the significand are the NaN's payload and can hold user defined data (e.g., to distinguish how NaNs were generated). Like for normal significands, the payload of NaNs can be either in BID or DPD encoding. Be aware that the bit numbering used in the tables for e.g. is in opposite direction than that used in the document for the IEEE 754 standard . The resulting 'raw' exponent is a 8 bit binary integer where the leading bits are not '11', thus values = , appr. bias is to be subtracted. The resulting significand could be a positive binary integer of 24 bits up to , but values above are 'illegal' and have to be treated as zeroes. To obtain the individual decimal digits the significand has to be divided by 10 repeatedly. The resulting 'raw' exponent is a 8 bit binary integer where the leading bits are not '11', thus values = , appr. bias is to be subtracted. The significand's leading decimal digit forms from the (0)cde or 100e bits as binary integer. The subsequent digits are encoded in the 10 bit 'declet' fields '' according the DPD rules (see below). The full decimal significand is then obtained by concatenating the leading and trailing decimal digits. The 10-bit DPD to 3-digit BCD transcoding for the declets is given by the following table. are the bits of the DPD, and are the three BCD digits. Be aware that the bit numbering used here for e.g. is in opposite direction than that used in the document for the IEEE 754 standard , add. the decimal digits are numbered 0-base here while in opposite direction and 1-based in the IEEE 754 paper. The bits on white background are not counting for the value, but signal how to understand / shift the other bits. The concept is to denote which digits are small () and encoded in three bits, and which are not, then calculated from a prefix of '100', and one bit specifying if 8 or 9. The 8 decimal values whose digits are all 8s or 9s have four codings each. The bits marked x in the table above are ignored on input, but will always be 0 in computed results. (The non-standard encodings fill in the gap from ) Benefit of this encoding is access to individual digits by de- / encoding only 10 bits, disadvantage is that some simple functions like sort and compare, very frequently used in coding, do not work on the bit pattern but require decoding to decimal digits (and evtl. re-encode to binary integers) first. An alternate encoding in short BID sections, 10 bits declets encoding 0d ... 1023d and simply using only the range from 0 to 999, would provide the same functionality, direct access to digits by de- / encoding 10 bits, with near zero performance penalty in modern systems, and preserve the option for bit-pattern oriented sort and compare, but the 'Sudoku encoding' shown above was chosen in history, may provide better performance in hardware implementations, and now 'is as it is'.


History

decimal32 has been introduced in the 2008 version of
IEEE 754 The IEEE Standard for Floating-Point Arithmetic (IEEE 754) is a technical standard for floating-point arithmetic originally established in 1985 by the Institute of Electrical and Electronics Engineers (IEEE). The standard #Design rationale, add ...
, adopted by ISO as ISO/IEC/IEEE 60559:2011.


Trivia

DPD encoding is relatively efficient, not wasting more than about 2.4 percent of space vs. BID, because the 210 = 1024 possible values in 10 bit is only little more than what is used to encode all numbers from 0 to 999. Zero has 192 possible representations (384 when both
signed zero Signed zero is zero with an associated sign. In ordinary arithmetic, the number 0 does not have a sign, so that −0, +0 and 0 are equivalent. However, in computing, some number representations allow for the existence of two zeros, often denoted by ...
s are included). In the cases of infinity and NaN, all other bits of the encoding are ignored. Thus, it is possible to initialize an array to infinities or NaNs by filling it with a single byte value.


See also

*
ISO/IEC 10967 ISO/IEC 10967, Language independent arithmetic (LIA), is a series of standards on computer arithmetic. It is compatible with ISO/IEC/IEEE 60559:2011, more known as IEEE 754-2008, and much of the specifications are for IEEE 754 special values (tho ...
, Language Independent Arithmetic *
Primitive data type In computer science, primitive data types are a set of basic data types from which all other data types are constructed. Specifically it often refers to the limited set of data representations in use by a particular processor, which all compiled ...
* D (E) notation (scientific notation)


References

{{reflist Computer arithmetic Data types Floating point types