相关疑难解决方法(0)

在预测分母时,数值不稳定的风险是什么?

假设我想将一个数字分成许多.

a /= x;
b /= x;
c /= x;
...
Run Code Online (Sandbox Code Playgroud)

由于乘法更快,诱惑就是这样做

tmp = 1.0f / x;
a *= tmp;
b *= tmp;
c *= tmp;
...
Run Code Online (Sandbox Code Playgroud)

1)这保证会产生相同的答案吗?我怀疑不是,但一些确认会很好.

2)如果 x非常大或非常小,我预计这会导致精度的显着降低.有没有一个公式可以告诉我我会牺牲多少精确度?

3)也许没有方便的公式,但我们至少可以说出数值不稳定性成为问题时的经验法则吗?它与操作数的大小有关,也可能与操作数的大小有什么关系?

c numeric ieee-754

8
推荐指数
1
解决办法
122
查看次数

如何溢出浮动?

我正在努力解决"C编程语言"中的练习2.1,其中一个人应该在本地机器上计算不同类型的范围,如char,short,int等,还可以浮动和加倍.通过除浮动和双重之外的所有内容我会注意溢出发生,因此可以计算最大/最小值.然而,通过浮动,这仍然无法正常工作.

那么,问题是为什么这段代码两次打印相同的值?我认为应该打印第二行inf

float f = 1.0;
printf("%f\n",FLT_MAX);
printf("%f\n",FLT_MAX + f);
Run Code Online (Sandbox Code Playgroud)

c floating-point

8
推荐指数
1
解决办法
441
查看次数

printf显示出奇怪的东西

有这样的代码:

#include <stdio.h>

int main() {
  float d = 1.0;
  int i = 2;
  printf("%d %d", d, i);
  getchar();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

0 1072693248
Run Code Online (Sandbox Code Playgroud)

我知道printf中有错误,第一个%d应该用%f替换.但为什么变量i打印错误(1072693248而不是2)?

c

6
推荐指数
1
解决办法
1124
查看次数

无法将浮点值保存到位域结构

我有一个结构

struct {
   u32 var1 :7;
   u32 var2 :4;
   u32 var3 :4;
   u32 var4 :1;
   u32 var5 :4;
   u32 var6 :7;
   u32 var7 :4;
   u32 var8 :1;
        } my_struct;

my_struct struct1[10];

for(int i=0;i<10; i++)
  {
    // left some portion
    struct1[i].var5= x;// where x is a float value retrieved from a database with sqlapi++ asDouble()

    cout<<"Value of x from db is:\t"<<x;   // prints 0.1 if it is stored, prints 2.4 if 2.4 is fed

    cout<<"Value of x stored in struct1 is:\t"<<struct1[i].var5; …
Run Code Online (Sandbox Code Playgroud)

c c++

3
推荐指数
1
解决办法
5153
查看次数

float或double值如何存储在C中的变量中?

我正在读的方式,整数如何存储在c中的变量中,最后一位用于整数的符号,其余的位用于存储数字.

但是如果我们在c中取一个double变量和long int变量,两者都有4个字节的大小,但是float可以存储非常大的数字,最大可以达到10 38,但是相同大小的long int不能存储这么大的值.


我想了解浮动存储中使用的机制.

c floating-point storage

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

标签 统计

c ×5

floating-point ×2

c++ ×1

ieee-754 ×1

numeric ×1

storage ×1