FunctionPackage: exclToCDocOverviewCGDocRelNotesFAQIndexPermutedIndex
Allegro CL version 10.1
Unrevised from 10.0 to 10.1.
10.0 version

read-tiny-float

Arguments: string &key (return-zero t)

This is a convenience function which allows users to read a small-magnitude float safely (that is, without floating-point-underflow errors). If the float is smaller in magnitude than the least-positive float of the appropriate format, then zero in the appropriate form (in the appropriate format) is returned by default, or, if the return-zero keyword argument is specified as nil, the least-positive or elast negative float of the appropriate format is returned.

string must be a string whose contents read as a single floating-point number. It is an error resulting in undefined behavior if there is more in the string than the representation of a sinlge floating point number. (The function decides on whether the resulting float is positive or negative based on the presence and location of a \#- charater. Such characters after the float representation could result in an incorrect value. If string represents a float larger than the least positive float or smaller than the least negative, the read is as if done by read-from-string. No protection is provided against floating-point-overflow errors.

Example

;;  This function is intended to allow for forms like the following:
;;  (defconstant *app-single-eps* 
;;               (max least-positive-single-float 1.0e-50))
;;  LEAST-POSITIVE-SINGLE-FLOAT is 1.0e-45, so that is the desried value
;;  but reading 1.0e-50 may cause a floating-point-underflow error.
;;  That can be protected against with this form:
;; (defconstant *app-single-eps* 
;;              (max least-positive-single-float 
;;                   (read-tiny-float "1.0e-50")))
;;
;;  In the reamining examples, we assume *read-default-float-format*
;;  is single-float.
;;
(read-tiny-float "1.0") RETURNS 1.0
(read-tiny-float "1.0e-50") RETURNS 0.0
(read-tiny-float "1.0e-50" :return-zero nil) RETURNS 1.0e-45
        ;; i.e. least-positive-single-float
(read-tiny-float "-1.0e-50" :return-zero nil) RETURNS -1.0e-45
        ;; i.e. least-negative-single-float
(read-tiny-float "-1.0d-50" :return-zero nil) RETURNS -1.0d-50
(read-tiny-float "-1.0d-550" :return-zero nil) RETURNS -5.0d-324
        ;; i.e. least-negative-double-float

See Floating-point infinities and NaNs, and floating-point underflow and overflow in implementation.htm for more information and sample handler code to cath the errors.


Copyright (c) 1998-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
This page was not revised from the 10.0 page.
Created 2019.8.20.

ToCDocOverviewCGDocRelNotesFAQIndexPermutedIndex
Allegro CL version 10.1
Unrevised from 10.0 to 10.1.
10.0 version