当前位置: 首页 > 知识库问答 >
问题:

浮点舍入、位串和二进制精度

储国发
2023-03-14

假设我使用一个32位的浮点数来存储一个位串(不要问)。进一步假设我想将这个浮点数序列化为一个文件(作为一个浮点数),并在序列化之前对浮点数的十进制表示进行银行家四舍五入。当我将浮点数读回程序时,系统会(自然地)将其存储在一个32位的浮点数中,该浮点数尽可能接近序列化的数字。

在银行舍入后,我的序列化浮点数在数字上必须有多精确,才能确保序列化的浮点数在二进制上与读回的浮点数相等?

共有1个答案

云宝
2023-03-14

如果你的问题是,你需要多少个十进制数字来确保转换到十进制和回到IEEE 754单精度产生原始值,那么它在这个答案中得到回答。这假设进行格式化和解释的软件是好的(语言标准可能不需要它)。

特别是,IEEE 754-2008标准第32页注释1中的第五项支持该答案,单个9位数字和双位17位数字:

从支持的二进制格式bf到外部字符序列的转换会产生原始数字的副本,只要至少指定了Pmin (bf)有效数字,并且在两次转换期间有效的舍入方向属性会舍入到最接近的舍入方向属性。

 类似资料:
  • 问题内容: 与浮点变量一起使用时出现问题(向下舍入/截断精度部分)。如何正确执行? 游乐场:https : //play.golang.org/p/49TjJwwEdEJ 输出: 我期望的输出是的,但实际产量。 问题答案: 原始问题: Golang中的楼层号不正确 将Math.Floor与float变量一起使用时出现问题(向下舍入/截断精度部分)。我该怎么做呢? 我预计1980 * 0.1 / 1

  • C和C++提供了几种宽度的浮点数据类型,但它们没有指定精度。编译器可以自由地使用理想化的算术来简化表达式,使用双精度来计算值上的表达式,或者使用双精度寄存器来保留变量或公共子表达式的值。 纠正我如果我是错的是错的,请参见编辑,但是将内存中的提升到双精度寄存器中也是合法的,所以存储一个值然后加载回来并不一定会截断位。 将一个数字转换成一个较低精度的最安全、最便携的方法是什么?理想情况下,在SSE2上

  • 本文向大家介绍C#浮点,双精度,十进制,包括了C#浮点,双精度,十进制的使用技巧和注意事项,需要的朋友参考一下 示例 浮动 float是.NET数据类型的别名System.Single。它允许存储IEEE 754单精度浮点数。存在此数据类型mscorlib.dll,每个C#项目在创建它们时都会隐式引用该数据类型。 大致范围:-3.4×10 38至3.4×10 38 十进制精度:6-9个有效数字 记

  • 我有一个关于PostgreSQL 9.2中浮点数的新手问题。 有没有直接舍入浮点数的函数,即不需要先将数字转换为数字类型? 另外,我想知道是否有一个函数可以用任意的度量单位进行取整,例如精确到0.05? 首先将数字转换为十进制形式时,以下查询工作正常: 然而,我真正想要实现的是以下几点: 这当前给了我以下错误: 谢啦

  • 我对Python很陌生,但对学习很感兴趣。对于uni-Python课程,我要创建一个程序,将温度转换为摄氏度或华氏度,并将转换显示到第一个小数位。我的问题在于我的打印行。 正如您在我的代码中看到的那样,我尝试在连接时使用ound()函数。虽然我尝试过将会浮点数转换为str(),但当我运行我的程序时,我收到了以下错误。 对于以下行 对于我的elif集团中的印刷线也是如此。任何帮助理解和解决这个问题的

  • 所以任意椭圆似乎比圆多两个自由度,因为除了圆的半径和圆心外,还有旋转角度,以及长轴与短轴之比的缩放(圆没有)。所以,我必须检查一下,但我相信,只有5个不同的点,才能唯一地定义一个通过这些点的椭圆,可能会受到点的一些限制,比如任何其他3个点的凸包中都没有点。不管怎样,假设一般情况下您需要一定数量的点来定义穿过它们的唯一椭圆(可能是4或5个点)。假设我们有更多的点数。如果我们处理的是IEEE浮点(例如