相关疑难解决方法(0)

可以存储在double中的最大整数

什么是最大的"非浮动"整数,可以存储在IEEE 754 double类型而不会丢失精度?

floating-point double types ieee-754

208
推荐指数
7
解决办法
16万
查看次数

哪个是IEEE 754浮点数无法准确表示的第一个整数?

为清楚起见,如果我使用的是实现IEE 754浮点数的语言,我声明:

float f0 = 0.f;
float f1 = 1.f;
Run Code Online (Sandbox Code Playgroud)

...然后将它们打印出来,我会得到0.0000和1.0000 - 完全正确.

但IEEE 754无法表示实线上的所有数字.接近于零,"差距"很小; 当你越走越远时,差距越来越大.

所以,我的问题是:对于一个IEEE 754浮点数,这是第一个(最接近零)整数,无法准确表示?我现在只关心32位浮点数,虽然如果有人给出它我会有兴趣听到64位的答案!

我认为这就像计算2 bits_of_mantissa并添加1 一样简单,其中bits_of_mantissa是标准公开的位数.我在我的机器(MSVC++,Win64)上为32位浮点数做了这个,但它看起来很好.

floating-point types ieee-754

152
推荐指数
2
解决办法
3万
查看次数

所有整数值都完美地表示为双精度数吗?

我的问题是,是否保证所有整数值都具有完美的双重表示.

请考虑以下打印"相同"的代码示例:

// Example program
#include <iostream>
#include <string>

int main()
{
  int a = 3;
  int b = 4;
  double d_a(a);
  double d_b(b);

  double int_sum = a + b;
  double d_sum = d_a + d_b;

  if (double(int_sum) == d_sum)
  {
      std::cout << "Same" << std::endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

对于任何架构,任何编译器,任何值ab?保证这是真的吗?i转换为的任何整数是否double总是表示为i.0000000000000和不表示为,例如,i.000000000001

我尝试了其他一些数字并且它总是如此,但无法找到关于这是巧合还是设计的任何信息.

注意:这与这个问题(除了语言)不同,因为我添加了两个整数.

c++ precision double standards ieee-754

57
推荐指数
3
解决办法
8693
查看次数

是否可以将所有32位整数精确地表示为双精度?

可能重复:
IEEE 754浮点数不能准确表示的第一个整数是什么?

这是一个基本问题,我的答案是肯定的(int = 32位,double = 53位螳螂+符号位)。

基本上可以断言?

int x = get_random_int();
double dx = x;
int x1 = (int) dx;
assert(x1 ==x);
if  (INT_MAX-10>x)
 {
       dx+=10;
       int x2=(int) dx;
       assert(x+10 == x2);
 }
Run Code Online (Sandbox Code Playgroud)

显然,涉及带有除法和类似内容的复杂表达式的内容((int)(5.0 / 3 * 3)与5/3 * 3是不同的),但我想知道转换和加减运算是否有效(如果没有溢出发生)保持等价。

double ieee-754

2
推荐指数
1
解决办法
836
查看次数

标签 统计

ieee-754 ×4

double ×3

floating-point ×2

types ×2

c++ ×1

precision ×1

standards ×1