nop*_*ole 0 c c++ floating-point double ieee-754
看起来JavaScript的number类型与C和C++的double类型完全相同,并且都是IEEE 754-1985。
JavaScript 可以使用 IEEE 754 作为整数,但是当数字变大或进行算术计算(例如除以10或 by )时3,它似乎可以切换到浮点模式。现在,C 和 C++ 仅使用 IEEE 754 作为double,因此仅使用浮点部分,而不使用“整数”部分。因此,C 和 C++ 是否未使用整数表示形式?
(C 未使用NaN, Infinite, -Infinite,-0因为我记得在 C 中从未使用过它们)。
\n\n如果是这样的话,那么 IEEE 754 的[整数和一些特殊值]的表示形式是否都没有被使用,因为 C 和 C++ 没有引用它们的能力?
\n
这个概念似乎源于这样一个事实:JavaScript 对所有数字使用 IEEE-754 二进制 64 格式,并通过将二进制 64 格式转换为实际运算的整数格式来执行(或至少定义)按位运算。(例如,JavaScript 中的按位 AND 是通过 ECMAScript 规范定义的,即通过将操作数转换为 32 位有符号整数而获得的位的 AND。)
\nC 和 C++ 不使用此模型。浮点和整数类型是分开的,并且值不保存在公共容器中。C 和 C++ 根据操作数的类型计算表达式,并且对于整数和浮点运算的计算方式有所不同。如果您有某个x具有浮点值的变量,则它已被声明为浮点类型,并且它的行为方式也是如此。如果某个变量y已声明为整数类型,则它的行为与整数类型相同。
C 和 C++ 没有指定使用 IEEE 754,除了 C 有一个可选附件指定了 IEEE 754 (IEC 60559) 的等效项,并且 C 和 C++ 实现可以选择使用 IEEE-754 格式并遵守它。IEEE-754 二进制 64 格式绝大多数用于doubleC 和 C++ 实现,尽管许多实现并不完全符合 IEEE-754。
在binary64格式中,编码为符号位S,11位\xe2\x80\x9cexponent\xe2\x80\x9d代码E,和52位\xe2\x80\x9csignificand代码,\xe2\x80\ x9d F(对于 \xe2\x80\x9cfraction,\xe2\x80\x9d,因为有效数的 S 已被用作符号位)。表示的值为:
\n这些表示包括从 \xe2\x88\x922 53 \xe2\x88\x921 到 +2 53 \xe2\x88\x921 (及更多)的所有整数,包括无穷大、零和 NaN。
\n如果 adouble具有某个整数值,例如 123,那么它就具有该整数值。它不会成为int整数类型,也不被 C 或 C++ 视为整数类型。
\n\n但是从 (-2 53 - 1) 到 (2 53 - 1),有很多数字未使用\xe2\x80\xa6
\n
binary64 格式中没有未使用的编码,但人们可能会认为大量 NaN 编码被浪费了。事实上,许多实现确实通过使程序无法访问或难以访问它们而浪费了它们。然而,IEEE-754 标准使它们可以用于用户希望使用的任何目的,并且有人使用它们来调试信息,例如记录创建 NaN 的程序计数器。
\n