2723b329 |
(in-package :cl-user)
(defpackage yaml.float
(:use :cl)
|
11ee2909 |
(:export :*float-strategy*
:not-a-number
:positive-infinity
:negative-infinity)
|
2723b329 |
(:documentation "Handle IEEE floating point values."))
(in-package :yaml.float)
(defparameter *float-strategy* :keyword)
#+sbcl
(defparameter *sbcl-nan-value*
(sb-int:with-float-traps-masked (:overflow :invalid :divide-by-zero)
(- sb-ext:double-float-positive-infinity
sb-ext:double-float-positive-infinity)))
|
11ee2909 |
(defun not-a-number ()
|
2723b329 |
(case *float-strategy*
(:error
(error 'yaml.error:unsupported-float-value))
(:keyword
:NaN)
(:best-effort
#+sbcl *sbcl-nan-value*
|
11ee2909 |
#+allegro #.excl:*nan-double*
#-(or sbcl allegro) :NaN)))
(defun positive-infinity ()
(case *float-strategy*
(:error
(error 'yaml.error:unsupported-float-value))
(:keyword
:+Inf)
(:best-effort
#+sbcl sb-ext:double-float-positive-infinity
#+allegro #.excl:*infinity-double*
#-(or sbcl allegro) :+Inf)))
(defun negative-infinity ()
(case *float-strategy*
(:error
(error 'yaml.error:unsupported-float-value))
(:keyword
:-Inf)
(:best-effort
#+sbcl sb-ext:double-float-negative-infinity
#+allegro #.excl:*negative-infinity-double*
#-(or sbcl allegro) :-Inf)))
|