| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version |
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.
;; 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.
| Allegro CL version 10.1 Unrevised from 10.0 to 10.1. 10.0 version |