在 C++ 中向 Float/Double 类型添加 0

2024-01-01

我听说像 0.1 + 0.2 这样的浮点运算可能会由于内部使用二进制浮点而产生像 0.30000000000000004 这样的舍入误差。

但是,如果我在 C++ 中向任何浮点数添加 0,是否能保证产生相同的值而没有任何舍入误差?我不知道浮点运算是如何工作的以及何时出现舍入误差。


IfC++ 实现支持 IEEE754 数学,那么这是有保证的。 IEEE754 标准对数学运算有精确的定义,因此 C++ 没有定义自己的规则。但 IEEE754 支持不是强制性的。

x + 0.0 == x对于任何数字 (*) 都是如此,因为 IEEE754 保证加法、减法、乘法和除法精确到最后一位。

(*) 当 x 不是数字 (NaN) 时,x+0.0也是 NaN,但是NaN != NaN在 IEEE754 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中向 Float/Double 类型添加 0 的相关文章

  • 单精度浮点无法表示的最小整数

    所以我知道单精度浮点不能表示的最小正整数是2 23 1 1 16 777 217 我们如何知道我们使用 2 23 1 1 我知道有一个隐含的 1 而 23 是尾数中表示的位数 但为什么会这样呢 我们怎么知道我们使用 2 23 1 1 IEE
  • Rand Index函数(聚类性能评估)

    据我所知 python 中没有可用于 Rand Index 的软件包 而对于调整后的 Rand Index 您可以选择使用sklearn metrics adjusted rand score labels true labels pred
  • C++除法精度不够如何提高结果精度

    我正在研究莱布尼茨问题 如图所示https www hackerrank com challenges leibniz https www hackerrank com challenges leibniz这里 计算 1 1 3 1 5 1
  • IEEE 754 浮点除法的可逆性

    IEEE 754 浮点除法的可逆性是什么 我的意思是标准是否保证如果double y 1 0 x then x 1 0 y i e x可以一点一点精确还原吗 时的情况y is infinity or NaN都是明显的例外 是的 有 IEEE
  • 如何修复错误代码 C4146“一元减运算符应用于无符号类型。结果仍然无符号”?

    数据类型int的最小值为 2 147 483 648 所以 我输入了 int val 2147483648 但是 它有一个错误 unary minus operator applied to unsigned type result sti
  • Python 2 十进制的 Sin、cos 等?

    在Python 2 6中 我发现Decimal相当于sqrt pi is Decimal pi sqrt sin cos 或其他 反 三角函数是否有类似的函数 The docs http docs python org library de
  • 两个不相等的浮点数相减是否可以得到0?

    在下面的例子中是否可以除以 0 或无穷大 public double calculation double a double b if a b return 0 else return 2 a b 当然 在正常情况下不会 但如果a and
  • SQL 中的小数位

    我正在计算百分比 一个例子是 38589 38400 因此百分比为 100 38589 38400 相当于 100 4921875 但结果显示为 100 如何让它显示 x 位小数 同样 如果我希望 2 显示为 2 000000 同样的工作吗
  • 将 IEEE 754 浮点转换为 MIL-STD-1750A 浮点

    我正在尝试将 IEEE 754 32 位单精度浮点值 标准 c 浮点变量 转换为无符号长变量 格式为MIL STD 1750A http www xgc com manuals mil std 1750a 1 7 pdf 我在帖子底部包含了
  • C++ 与 Python 精度

    尝试查找 num num 的前 k 位数字的问题我用 C 和 Python 编写了相同的程序 C long double intpart num f digit k cin gt gt num gt gt k f digit pow 10
  • 如何确定给定的 int64_t 是否可以无损存储在 double 中?

    我想确定给定的 64 位整数是否可以无损存储在双精度数中 现在我有这个代码 static cast
  • Java 中的 x86 80 位浮点类型

    我想模拟 x86 扩展精度类型并执行算术运算并转换为 Java 中的其他类型 我可以尝试使用 BigDecimal 来实现它 但涵盖 NaN 无穷大和强制转换的所有特殊情况可能是一项乏味的任务 我知道一些库提供比 double 精度更高的其
  • pandas 和 numpy 的平均值不同

    我有一个 MEMS IMU 我一直在其上收集数据 并使用 pandas 从中获取一些统计数据 每个周期收集 6 个 32 位浮点数 对于给定的收集运行 数据速率是固定的 数据速率在 100Hz 到 1000Hz 之间变化 收集时间长达 72
  • 具有特定数字的浮点精度

    以下值给出了错误的精度 仅通过特定数字即可观察到这一点 可能是浮动表示问题 但想知道具体原因 String m 154572 49 154 572 49 Float f Float parseFloat m System out print
  • 如何使用“%f”将双精度值填充到具有正确精度的字符串中

    我正在尝试使用 a 来填充带有双精度值的字符串sprintf像这样 sprintf S f val 但精度被截断至小数点后六位 我需要大约 10 位小数来保证精度 如何才能做到这一点 宽度 精度 宽度应包括小数点 8 2表示8个字符宽 点前
  • 是否可以在不诉诸任意精度数据类型的情况下消除浮点错误?

    我想知道在特定条件下是否可以在不诉诸任意精度数据类型的情况下消除浮点错误 问题是常见的 语言是 Ruby 但它适用于任何语言 f 1829 82 gt 1829 82 f 12 0 gt 152 485 f 12 0 round 2 gt
  • 我应该如何比较这些双打以获得所需的结果?

    我这里有一个简单的示例应用程序 我在其中进行乘法和加法double变量 然后将它们与预期结果进行比较 在这两种情况下 结果都等于预期结果 但当我进行比较时 它失败了 static void Main string args double a
  • 如果两种语言都遵循 IEEE 754,那么两种语言的计算会得到相同的结果吗?

    我正在将程序从 Scilab 代码转换为 C 特别是一个循环产生的结果与原始 Scilab 代码略有不同 这是一段很长的代码 因此我不会将其包含在问题中 但我会尽力总结下面的问题 问题是 循环的每一步都使用上一步的计算 此外 计算之间的差异
  • 如何安全地将 CGFloat 降低或提高到 int?

    我经常需要在地板或天花板上安装CGFloat to an int 用于计算数组索引 我永远看到的问题floorf theCGFloat or ceilf theCGFloat 是浮点不准确可能会带来麻烦 那如果我的CGFloat is 2
  • 如何在C++中生成高精度的随机双数?

    我正在尝试生成一系列高精度的双随机数 例如 0 856365621 小数点后有 9 位数字 我从网上找到了一些方法 但是 它们确实生成了双随机数 但精度没有我要求的那么好 只有小数点后6位 那么 我可以知道如何实现我的目标吗 在 C 11

随机推荐