INTERNET-DRAFT Doug Wood Tivoli Systems Inc December, 1999 Expires: June 2000 Directory string representation for floating point values Status of this Memo This document is an Internet-Draft and is in full conformance with all provisions of Section 10 of RFC2026. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet- Drafts. Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet- Drafts as reference material or to cite them other than as "work in progress." The list of current Internet-Drafts can be accessed at http://www.ietf.org/ietf/1id-abstracts.txt The list of Internet-Draft Shadow Directories can be accessed at http://www.ietf.org/shadow.html. Distribution of this memo is unlimited. It is filed as , and expires on June, 2000. Please send comments to the authors. 1. Abstract This draft defines a way that floating point values may be represented as directory (ASCII) strings such that standard ordering rules can be used to sort the strings into the correct collating sequence for their numeric value. The representation is intended for use in X.500 like directories, and has been developed to support mapping of the DMTF Common Information Model. 2. Introduction X.500 directories provide for use definable syntaxes, matching and ordering rules. This provides for the definition of schema supporting any type and structure of data. The definition of the LDAP protocol [RFC 2251] has encouraged the creation new generation of directories that support the X.500 structure, but donÆt support some of X.500Æs more heavy weight feature. Among the unsupported feature are user definable syntaxes. This restricts schema designers to syntaxes provided by the directory vendor. These typical do not include a syntax for floating point values. This draft defines a an ASCII format for floating point values that Expires June 2000 [Page 1] allow them to be stored in attributes with Directory String syntax. And allows the standard case insensitive ordering rule to sort them in the correct collating sequence for their numeric value. In addition, attributes are defined which can be used for values stored in the format described below, or as superiors for user defined attributes. The attributes are provided both as a convenience, and as a method to document the storage format used. The format is defined specifically to support mapping the DMTF Common Information Model to directory schema, but also has general applicability. 3. String format Because string comparison is positional, it is necessary to define a fix format for representing the mantissa, and the exponent. Because the collating sequence for string comparison is left to right, the most significant portion of the representation must be on the left. There are four separate cases that must be handled. o Negative mantissa and positive exponent o Negative mantissa and negative exponent o Positive mantissa and negative exponent o Positive mantissa, and positive exponent The above list is ordered by the desired collating sequence from smallest value to largest value. A single representation does not provide the correct collating sequence for all cases. Therefor it is necessary to sort by case, and then to sort within each case. To accomplish this, the cases are number from 1 to 5 as follows: 1. Negative mantissa and positive exponent 2. Negative mantissa and negative exponent 3. Zero 4. Positive mantissa and negative exponent 5. Positive mantissa, and positive exponent For symmetry, zero is treated as its own case instead of a special sub-case of case 4. A 64 bit float has a range of 1.7976931348623158e+308 to 2.2250738585072014e-308[1]. To represent this as a string, three digits are required for the exponent, and 17 for the mantissa not including the decimal point. The directory representation is fixed format, zero padded, blank separated, with the most significant fields on the left. The first character in the string is the case number. For readability, it is followed by a blank. Next is a 3 digit exponent, again followed by a blank. Next are a single digit, a decimal point, and 16 digits of decimal. Expires June 2000 [Page 2] +-+-+---+-+-+-+----------------+ | | |Exp| | | |16 digits | +-+-+---+-+-+-+----------------+ |c| |nnn| |n|.|nnnnnnnnnnnnnnnn| +-+-+---+-+-+-+----------------+ The way each of the fields is interpreted varies with the case. The cases are examined in reverse order so the simplest may be examined first. 3.1 Positive mantissa and positive exponent (case 5) This is relatively straightforward. The exponent field has the exponent value expressed as a 3-digit integer string. It is zero padded to the left if necessary. The mantissa field as a seventeen- digit decimal string with exactly 1 digit to the left of the decimal point for a total of 18 characters. It is zero padded to the right if necessary. Notes: - The first digit is a 5 to indicate the case - There is exactly one digit to the left of the decimal place. It is always non zero. - Positions 2 through 4 have the exponent. It is right justified, and zero padded to the left if it is less than three digits - Spaces are added to aid human readability - No signs are required for the exponent or the mantissa because they are expressed in the case number 3.2 Positive mantissa and negative exponent (case 4) When the exponent is negative, larger whole number values for the exponent produce smaller actual values. For this case, a string comparison of the numeric representation of the exponent yields the reverse of the desired collating sequence. To flip the collating sequence, the value of the exponent is added to 999, and the result stored as the exponent. No sign is stored. The sign of both the exponent and mantissa are indicated by the case character. 3.3 Zero (case 3) The case number is sufficient to insure the correct collating sequence. To insure equality comparisons work correctly, all remaining digits are zero. 3.4 Negative mantissa and negative exponent (case 2) When both the exponent and the mantissa are negative, the collating order for the exponent is correct. A larger exponent yields a number that is closer to zero and therefor larger. However, the collating sequence for the mantissa is reversed. To flip the collating sequence for the mantissa it is added to 10, and the result stored. Expires June 2000 [Page 3] 3.5 Negative mantissa and positive exponent (case 1) When both the exponent and the mantissa are negative, the collating sequence is flipped for both of them. This is achieved by adding the exponent to 999, and the mantissa to 10. 4. Examples +----------+--------------------------+ | Value | Representation | +----------+--------------------------+ | 3.25e5 | 5 005 3.2500000000000000 | +----------+--------------------------+ | 8.4e-5 | 4 994 8.4000000000000000 | +----------+--------------------------+ | 8.4e-7 | 4 992 8.4000000000000000 | +----------+--------------------------+ | 7.23e-7 | 4 992 7.2300000000000000 | +----------+--------------------------+ | 0.0e0 | 3 000 0.0000000000000000 | +----------+--------------------------+ | -4.25e-4 | 2 004 5.7500000000000000 | +----------+--------------------------+ | -6.35e-4 | 2 004 3.6500000000000000 | +----------+--------------------------+ | -6.35e-3 | 2 003 3.6500000000000000 | +----------+--------------------------+ | -4.0e104 | 1 895 6.0000000000000000 | +----------+--------------------------+ | -4.0e105 | 1 894 6.0000000000000000 | +----------+--------------------------+ | -6.0e105 | 1 894 4.0000000000000000 | +----------+--------------------------+ 5. 32 bit vs. 64 bit values Both 32 and 64 bit floating point values are in common usage. To allow comparisons between the two, both are stored in the 64-bit format described above. This implies a greater degree of precision than is actually available for 32-bit values. The directory mapping described below provides implicit documentation of the actual precision of a value. 6. Directory mapping The intent of the mapping is to simulate a new syntax. The advantage of this approach is it may be utilized without any changes to existing directory servers. To foster that illusion, and to aid in documentation, two new attributes are defined. cimFloat32, and cimFloat64. All floating-point attributes are derived from one of these. They are defined as: Expires June 2000 [Page 4] cimFloat32 { ; Need OID assigned NAME æcimFloat32Æ DESC '32 bit float encoded as sortable float format' EQUALITY caseIgnoreeMatch ORDERING caseIgnoreOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) cimFloat64 ( ; Need OID assigned NAME æcimFloat64Æ DESC 'Æ64 bit float encoded as sortable float formatÆ EQUALITY caseIgnoreeMatch ORDERING caseIgnoreOrderingMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) 7. References [1] From sys/limits.h on AIX 4.3 8. Acknowledgement This work is a product of the DMTF LDAP Mapping Working Group and has benefited from many comments and discussions during this groups meetings. 9. Authors' Addresses Doug Wood Tivoli Systems 9025 North River Rd. Indianapolis, IN 46240-7622 Dawood@Tivoli.com Expires June 2000 Expires June 2000 [Page 5]