C是否舍入浮点常量

八角

Go中有关浮点精度的问题使我想知道C如何处理该问题。

在C中使用以下代码:

float a = 0.1;

a具有最接近的IEEE 754二进制表示形式:

00111101110011001100110011001101 (Decimal:  0.10000000149011612)

还是将其裁剪为:

00111101110011001100110011001100 (Decimal:  0.09999999403953552)

还是根据编译器/平台的不同而不同?

一个实现可以执行以下任一操作(甚至可以再执行一次):

对于十进制浮点常量,以及对于FLT_RADIX不是2的幂的十六进制浮点常量,结果要么是最接近的可表示值,要么是在实现定义中选择的,紧邻最接近的可表示值的较大或较小的可表示值。方式。

(C11,第6.4.4.2/3节)

从C99开始,我们有了十六进制浮点常量,因此您可以精确地指定所需的位(假设实现提供二进制浮点:),因此可以这样说:

float a = 0x1.99999Ap-4;

对于IEEE 754 32位浮点数:

#include <stdio.h>
int main() {
  float a = 0.1;
  float low  = 0x0.1999999p0;
  float best = 0x0.199999ap0;
  float high = 0x0.199999bp0;
  printf("a is %.6a or %.16f, which is either %.16f, %.16f or %.16f\n",
          a, a, low, best, high);
  return 0;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#浮点舍入行为

来自分类Dev

fscanf() 在 C 中舍入浮点数

来自分类Dev

是否明确指定了大浮点文字的舍入模式?

来自分类Dev

C ++错误:浮点常量后缀'.d'无效

来自分类Dev

数组除以常量后,如何更改numpy数组中浮点数的自动舍入?

来自分类Dev

如何在C#中舍入浮点值?

来自分类Dev

如何在C#中舍入浮点值?

来自分类Dev

如何使用C ++在OpenCV中舍入浮点数

来自分类Dev

如何在 C# 中舍入浮点变量

来自分类Dev

浮点舍入的潜在问题

来自分类Dev

Python 2.7浮点舍入

来自分类Dev

解决浮点舍入问题

来自分类Dev

由于浮点舍入错误,“ floor”是否有可能返回不正确的结果?

来自分类Dev

如何访问浮点常量?

来自分类Dev

IEEE浮点数舍入

来自分类Dev

在Java中舍入浮点转换

来自分类Dev

PHP不舍入浮点值

来自分类Dev

如何在C ++中将浮点数舍入到下一个0.5的增量?

来自分类Dev

不增加最后一位数的舍入浮点值 Objective C iOS

来自分类Dev

在 Visual C++ 中,如何将浮点值舍入到指定的精度?

来自分类Dev

常量是否有C ++临时右值

来自分类Dev

浮点常量的编译时转换

来自分类Dev

浮点常量的编译时转换

来自分类Dev

DateDiff是否舍入?

来自分类Dev

使用sprintf舍入浮点数

来自分类Dev

使用AWK舍入浮点数

来自分类Dev

T-SQL AVG舍入浮点结果

来自分类Dev

sybase 15.7浮点到数字舍入错误

来自分类Dev

MySQL浮点数被意外舍入