问题标签 [ieee-754]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
8968 浏览

c++ - 为什么 c/c++ 浮点类型的命名如此奇怪?

C++ 提供了三种浮点类型:float、double 和 long double。我很少在我的代码中使用浮点数,但是当我这样做时,我总是被无害的行上的警告所吸引,比如

问题是文字 4.0 是双精度数,而不是浮点数——这很烦人。

对于整数类型,我们有 short int、int 和 long int,这非常简单。为什么 C 没有短浮点数、浮点数和长浮点数?“双”到底是从哪里来的?

编辑:浮动类型之间的关系似乎类似于整数。double 必须至少与 float 一样大,long double 至少与 double 一样大。没有其他精度/范围保证。

0 投票
3 回答
1121 浏览

c - floor() 是否返回完全可表示的东西?

在 C89 中, floor() 返回一个双精度值。以下是否保证工作?

我担心的是 floor 的结果在 IEEE 754 中可能无法完全表示。所以 d 得到类似 2.99999 的结果,x 最终为 2。

对于这个问题的答案是肯定的,一个 int 范围内的所有整数都必须可以精确地表示为双精度数,并且 floor 必须始终返回该精确表示的值。

0 投票
13 回答
42417 浏览

c++ - 浮点到二进制值(C++)

我想在 C++ 中获取一个浮点数,例如 2.25125,以及一个填充了二进制值的 int 数组,该二进制值用于将浮点数存储在内存中(IEEE 754)。

所以我可以取一个数字,最后得到一个带有浮点二进制值的 int num[16] 数组: num[0] 将是 1 num[1] 将是 1 num[2] 将是 0 num[3 ] 将是 1 等等...

将 int 放入数组并不困难,只是获取浮点数的二进制值的过程就是我卡住的地方。您可以只读取浮点变量的内存中的二进制文件吗?如果没有,我怎么能在 C++ 中做到这一点?

编辑:以这种方式进行比较的原因是我想学习在 C++ 中进行按位运算。

0 投票
5 回答
7064 浏览

floating-point - 80 位扩展精度数据类型的应用/好处是什么?

是的,我的意思是说80-bit。那不是笔误...

我在浮点变量方面的经验总是涉及 4 字节的倍数,比如单数(32 位)、双数(64 位)和长双数(我曾见过它被称为 96 位或 128 位)。这就是为什么当我在编写一些代码以读取和写入AIFF(音频交换文件格式)文件时遇到80 位扩展精度数据类型时有点困惑:选择了扩展精度变量来存储采样音轨的速率。

当我浏览 Wikipedia 时,我发现上面的链接以及IEEE 754-1985 标准摘要中的 80 位格式的简要说明(但不在IEEE 754-2008 标准摘要中)。似乎在某些架构上“扩展”和“长双”是同义词。

我没有遇到的一件事是使用扩展精度数据类型的特定应用程序(当然,AIFF 文件采样率除外)。这让我想知道:

  • 有没有人遇到过扩展精度对于某些编程应用程序是必要/有益的情况?
  • 80 位浮点数的好处是什么,除了明显的“它比 double 精度高一点,但比 long double 的大多数实现少字节”?
  • 它的适用性正在减弱吗?
0 投票
4 回答
1676 浏览

floating-point - 哪些语言向开发人员公开了 IEEE 754 陷阱?

为了教育目的,我想玩这些陷阱。

数值演算中默认行为的一个常见问题是我们“错过”出现在错误运算中的 Nan(或 +-inf)。默认行为是通过计算进行传播,但是一些操作(如比较)会破坏链并松开 Nan,并且其余的处理继续进行而不承认算法前面步骤中的奇异性。

有时我们有办法对这种事件做出反应:延长函数(“在我的情况下为 0/0 = 12”),或者在时域模拟中放弃步骤并尝试其他设置(如预测器、步骤大小或其他)。

所以这是我的问题:您知道将 IEEE754 陷阱暴露给开发人员的语言吗?我不想为此与 ASM 搞混。

0 投票
3 回答
1592 浏览

ieee-754 - 哪些语言可以正确获得 IEEE 754?

我只是花了我一周的时间来处理这个主题,并没有发现任何语言可以使 IEEE 754 规范正确。

甚至 GCC 也不尊重相关的 C99 部分(它忽略了 FENV_ACCESS 杂注,有人告诉我,我的工作示例纯属运气)。

使用库函数来尊重规范是不可能的(AFAIK),您需要语言的支持,因为当您使用标志或舍入时,一些常见的优化是被禁止的。

所以这是我真正的问题:是否有语言(来自 C/C++ 或原始程序集)可以让我访问舍入模式、异常标志和微积分?

0 投票
7 回答
14651 浏览

c++ - 确保 C++ 双精度为 64 位

在我的 C++ 程序中,我需要从外部字节序列中提取一个 64 位浮点数。有什么方法可以确保在编译时双精度为 64 位?我应该使用其他类型来存储数据吗?

编辑:如果您正在阅读本文并实际上正在寻找一种方法来确保以 IEEE 754 格式存储,请查看下面的 Adam Rosenfield 的答案。

0 投票
4 回答
7517 浏览

c - 用双精度表示整数

double(给定字节数,具有合理的尾数/指数平衡)能否始终完全精确地保持该字节数一半的无符号整数的范围?

例如,一个 8 字节的 double 能否完全精确地保存一个 4 字节的 unsigned int 的数字范围?

这将归结为如果一个两字节浮点数可以容纳一字节无符号整数的范围。

一字节的无符号整数当然是 0 -> 255。

0 投票
2 回答
6393 浏览

perl - 如何在 Perl 中将四个字符转换为 32 位 IEEE-754 浮点数?

我有一个项目,其中一个函数接收四个 8 位字符,需要将生成的 32 位 IEEE-754 浮点数转换为常规 Perl 数字。似乎应该有比下面的工作代码更快的方法,但我无法找出一个更简单的 pack 函数。

它不起作用,但似乎很接近:

作品:

有人有更好的方法吗?

0 投票
7 回答
87409 浏览

floating-point - 在 16、32 和 64 位 IEEE-754 系统中可以表示什么范围的数字?

我对浮点数的表示方式略知一二,但恐怕还不够。

一般的问题是:

对于给定的精度(出于我的目的,以 10 为基数的精确小数位数),对于 16、32 和 64 位 IEEE-754 系统可以表示什么范围的数字?

具体来说,我只对精确到 +/-0.5(个位)或 +/-0.0005(千分位)的 16 位和 32 位数字的范围感兴趣。