问题标签 [single-precision]

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 投票
1 回答
97 浏览

java - 将位转换为双精度后,如何在不使用 BigDecimal 的情况下存储实际的浮点/双精度值?

根据几个浮点计算器以及我下面的代码,以下 32 位00111111010000000100000110001001的实际浮点值为 (0.750999987125396728515625)。由于它是实际的 Float 值,我应该认为将其存储在 Double 或 Float 中会保留精度和精确值,只要(1)不执行算术(2)使用实际值和(3)值是没有被贬低。那么为什么实际值与 (0.7509999871253967) 的强制转换(示例 1)和文字(示例 2)值不同?

我以这个计算器为例: https ://www.h-schmidt.net/FloatConverter/IEEE754.html

在此处输入图像描述

这是输出:

0 投票
2 回答
189 浏览

binary - 使用 IEEE 754 浮点到二进制

您好,我需要使用 IEEE 格式存储 0.2730。现在我所做的是将 sing 设置为 0,因为数字是正数。现在我想,既然点之前是 0,那么我不必对它进行任何转换,因为二进制中的 0 它只是 0,所以指数最终会是 0,我只需要将 127 转换为二进制。当我寻找尾数时,我试图做模式,当我将小数部分乘以 2 并在我找不到模式也没有达到 0 之前取出数字所以我所做的只是乘以直到找到 23 位. 现在,当我查看实际值时,它说指数应该是 125,而这个数字实际上是 0 0111 0001 0111 1000 1101 0101 000。现在我不知道为什么我必须从指数中减去 2,因为我认为在进行乘以 2 模式时我不必移动点或何时停止。我留下了我工作的照片以防万一。在此先感谢您,希望您一切顺利

在此处输入图像描述

0 投票
3 回答
230 浏览

c# - Byte[] 到浮点数的转换

现在我的byte[]值是 82 184 126 63 。即,

我想恢复到字节以上浮动。所以,我用Bitconverter.Tosingle

我的疑问是我需要赋予byte[]价值并开始索引。

您能否将解释的代码分享为代码。

0 投票
1 回答
1019 浏览

arduino - Arduino 将浮点数转换为十六进制 IEEE754 单精度 32 位

我想在Arduino的以下站点中将浮点值转换为IEEE754单精度32位十六进制值。 https://www.binaryconvert.com/result_float.html?decimal=051046049048

如何创建这样的功能?如果格式不同也没关系。

0 投票
2 回答
311 浏览

c - 仅使用单精度浮点在 [0,pi] 上逼近余弦

我目前正在研究余弦的近似值。由于最终的目标设备是使用 32 位浮点 ALU / LU 自行开发的设备,并且有专门的 C 编译器,因此我无法使用 c 库数学函数(cosf,...)。我的目标是编写在准确性和指令/周期数方面不同的各种方法。

我已经尝试了很多不同的逼近算法,从 fdlibm、taylor 展开、pade 逼近、remez 算法使用 maple 等等......

但是,一旦我只使用浮点精度来实现它们,精度就会大大降低。并且可以肯定:我知道使用双精度,更高的精度完全没有问题......

现在,我有一些近似值,精确到 pi/2 附近的几千 ulp(发生最大误差的范围),我觉得我受到单精度转换的限制。

为了解决主题参数减少:输入以弧度为单位。我假设参数减少会由于除法/乘法而导致更多的精度损失......因为我的整体输入范围只有 0..pi,我决定将参数减少到 0..pi/2。

因此我的问题是:有没有人知道高精度的余弦函数的单精度近似(并且在最好的情况下是高效率的)?是否有任何算法可以优化单精度近似值?你知道内置的 cosf 函数是否在内部以单精度或双精度计算值?~

~

如果我忘记了任何信息,请随时询问!

提前致谢

0 投票
1 回答
408 浏览

c - C中三角函数的单精度参数减少

我已经实现了在 C 中以单精度(32 位浮点)计算的三角函数(sin、cos、arctan)的一些近似值。它们精确到大约 +/- 2 ulp。

我的目标设备不支持任何<cmath><math.h>方法。它不提供 FMA,而是提供 MAC ALU。ALU 和 LU 以 32 位格式计算。

我的 arctan 近似实际上是N.juffa 近似的修改版本,它在整个范围内近似 arctan。正弦和余弦函数在 [-pi,pi] 范围内精确到 2 ulp。

我现在的目标是为正弦和余弦提供更大的输入范围(尽可能大,理想情况下为 [FLT_MIN,FLT_MAX]),这导致我减少参数。

我目前正在阅读不同的论文,例如 KCNg 的 A RGUMENT REDUCTION FOR HUGE ARGUMENTS: Good to the Last Bit或关于这种新的参数缩减算法的论文,但我无法从中得出实现。

我还想提两个涉及相关问题的 stackoverflow 问题:有一种基于我链接的第一篇论文的matlab 和 c++ 方法。它实际上使用 matlab、cmath 方法,并将输入限制为 [0,20.000]。另一个已经在评论中提到了。它是一种在 C 中实现 sin 和 cos 的方法,使用我无法使用的各种 c 库。由于这两个帖子已经有好几年了,可能会有一些新的发现。

似乎在这种情况下主要使用的算法是将 2/pi 的数量精确地存储到所需的位数,以便能够准确地计算模计算并同时避免取消。我的设备不提供大型 DMEM,这意味着无法使用具有数百位的大型查找表。这个过程实际上在参考资料的第 70 页上进行了描述,顺便说一下,它提供了很多关于浮点数学的有用信息。

所以我的问题是:是否有另一种有效的方法来减少正弦和余弦获得单精度避免大 LUT 的参数?上面提到的论文实际上侧重于双精度,最多使用 1000 位,这不适合我的用例。

我实际上没有在 C 中找到任何实现,也没有找到针对单精度计算的实现,我将不胜感激任何类型的提示/链接/示例...

0 投票
3 回答
168 浏览

c# - 如何打印存储在浮点数中的确切值?

如果我将值 0.1 分配给浮点数:

存储在内存中的实际值并不是 0.1 的精确表示,因为 0.1 不是一个可以用单精度浮点格式精确表示的数字。存储的实际值(如果我的数学运算正确的话)是

但我无法确定让 C# 打印出该值的方法。即使我要求它将数字打印到很多小数位,它也没有给出正确的答案:

如何打印存储在浮点数中的确切值;内存中位模式实际表示的值?

编辑:在其他地方引起了我的注意,您可以在 .NET Core 和 .NET 5.0 上获得我要求使用标准格式字符串的行为。所以这个问题是.NET Framework 特有的,我猜。

0 投票
1 回答
86 浏览

floating-point - 尝试表示 2^(-23) 时,难以掌握单精度 IEEE-754 中的“转换错误”

让我先说我理解为什么诸如0.1, 3.14,之类0.2的值和其他不能由 2 的幂组合组成的值最终无法由 IEEE-754 格式表示,并且只能在精度允许的情况下尽可能地近似它们.

我难以理解的是为什么尝试表示值2 -23会导致轻微的误差。

2 -23完全等于1.1920928955078e-70.00000011920928955078。在单精度 IEEE-754 中,它可以构造如下:

  • 符号位是0
  • 偏置指数是104(或0b01101000二进制)以解释 127 偏置,导致-23成为最终指数值
  • 尾数的位域完全由0s 组成,其最终值是1.0在考虑隐式1位时

但是,将此特定位序列存储在内存中并以十进制表示法将其打印出来,精度为小数点后 25 位,结果如下:

这个值包含一个精确的错误1.25e-21。在此交互式网站上,此错误值称为“转换错误”。

我很难理解这一点——因为我理解,例如,为什么一个值+3.14不能用单精度位域精确表示。由指数中的值缩放的尾数中 2 的负幂的组合无法准确表示3.14,因此选择下一个最接近的近似值。因此,预计会出现“由于转换导致的错误”。与此相反,值2 -23能够准确地存储在单精度位域中,但是当转换回十进制表示法时,会出现错误。

显然我有某种误解,但我无法弄清楚到底是哪里。

0 投票
1 回答
95 浏览

c++ - 访问浮点数的 4 个字节是否会破坏 C++ 别名规则

我需要读取文件的二进制内容并将提取的字节转换为单精度浮点数。如何做到这一点已经在这里被问到了。该问题确实有正确的答案,但我想知道特定答案是否实际上是有效的 C++ 代码。

该答案给出了以下代码:

这实际上是有效的 C++ 代码吗?我不确定它是否违反任何别名规则。

请注意,我的目标是具有大端序的平台,其中浮点数保证至少为 32 位长。