# 3.2 浮点型基础

浮点数对于表示非整数的数字很有用。浮点数的范围与您使用的机器上的C double数据类型的范围相同。在 所有支持 Emacs 的计算机上，这是 IEEE binary64 浮点格式，由IEEE Std 754-2019标准化， 并在 David Goldberg 的论文“ What Every Computer Scientist Should Know About Floating-Point Arithmetic ”中进一步讨论。在现代平台上，浮点运算严格遵循 IEEE-754 标准；然而，在一些过时的平台上，特别是 32 位 x86，结果并不总是正确四舍五入。

浮点数的读取语法需要小数点、指数或两者。 在数字及其指数之前可加 可选符号 ('+' 或者 '-')。例如， '1500.0’, ‘+15e2’, ‘15.0e + 2’, ‘+1500000e-3'， 和 '.15e4' 是值为 1500 的浮点数的五种表示方式。它们都是等价的。与 Common Lisp 一样，Emacs Lisp 要求浮点数中的任何小数点后至少有一位：'1500.' 是整数，而不是浮点数。

Emacs Lisp 将 -0.0 和 普通的 0 视为等价，这种等价是基于 = 比较。这个规定符合 IEEE 浮点数标准，这个标准指明 -0.0 和 0.0 在数值层面是相等的，即便有些操作符可能会区别它们。

IEEE浮点标准支持正无穷大与负无穷大浮点值。它还提供了一类称为 NaN 或“非数字”的值；在没有正确答案的情况下，数值函数会返回此类值。例如，(/ 0.0 0.0)返回 NaN。NaN 在数值上永远不等于任何值，甚至不等于它本身。NaN 带有一个符号和一个有效数，当它们的符号和有效数一致时，非数值函数将两个 NaN 视为相等。NaN 的有效数依赖于机器。

当NaN和符号的零参与，非数字功能，如 eql，equal，sxhash-eql，sxhash-equal并 gethash确定值是否是无法区分的，他们不是是否数值上相等。例如，当x和 y是相同的 NaN 时，(equal x y)返回t而 (= x y)使用数值比较并返回nil；相反，(equal 0.0 -0.0)返回nil而 (= 0.0 -0.0)返回t。

以下是这些特殊浮点值的读取语法：

无限大 ‘1.0e+INF' 和 '-1.0e+INF’

非数字 ‘0.0e + NaN' 和 '-0.0e + NaN’

以下函数用于专门处理浮点数：

Function：isnan x 如果其浮点参数为 NaN，则此谓词返回 t， 否则返回 nil。

Function：frexp x 此函数返回一个 cons cell (s . e)，其中s和e分别是浮点数x的有效数和指数。

如果 x 是有限的，则 s 是介于 0.5（含）到 1.0（不含）之间的浮点数，e 是整数，并且 x = s \* 2 \*\* e。如果 x 为零或无穷大，则 s 与 x 相同。如果 x 是 NaN，则 s 也是 NaN。如果 x 为零，则 e 为 0。

Function：ldexp s e 给定数字有效数 s 和整数指数 e ，此函数返回浮点数 s \* 2 \*\* e。

Function：copysign x1 x2 此函数将 x2 的符号复制到 x1 的值，并返回结果。 x1 和 x2 必须是浮点数。

Function：logb x 此函数返回 x 的二进制指数。更准确地说，如果 x 是有限且非零的，则该值是 |x| 的以 2 为底的对数 , 并向下舍入为整数。如果 x 为零或无穷大，则值为无穷大；如果 x 是 NaN，则该值是 NaN。

(logb 10) ⇒ 3 (logb 10.0e20) ⇒ 69 (logb 0) ⇒ -1.0e+INF


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://emacs-lisp.ivory.cafe/shu-zi/fu-dian-xing-ji-chu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
