c - 双 float ?使用 double 时计算错误

标签 c floating-point precision

非常有趣的事情。找到方程结果的最简单的源代码:ax + b = 0。我想知道,当 double x = -13/12 = -1.000000;和 双 x = -12/13= 0.000000; (对于 a 和 b int(类型转换)或 double),但 float 或 double x = -13f/12f = 1.083333 (没错)。 双倍有什么问题?

如果 {int a,b;},方程 {double 或 float x = -((double 或 float)b)/a;} 正确吗?如果它不可能是正确的 - 为什么?

int main()
{
 double a, b, x; 
 scanf("%f %f",&a, &b);
 fflush(stdin);
 if(a!=0)
 {x = -b/a; printf("x = %f", x);}
 else printf("There is no solve in your equation.");
 getchar();
 return 0;
}

谢谢

最佳答案

在 C 语言中,如果你这样写

double x = 13/12;

编译器不会将除法视为浮点除法。相反,它会用整数进行除法,截断结果,并将其存储在 double 型中。更一般地说,C 在确定要执行什么类型的算术时不会查看正在写入的变量的类型。它只查看操作数的类型。

要解决此问题,请编写

双x = 13.0/12.0;

这些文字的类型为 double,因此除法将正确工作。

关于c - 双 float ?使用 double 时计算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4629667/

相关文章:

objective-c - 关于在 Objective-C 中验证用户输入的问题,数字与字符串

c - 这种使用间接寻址的方式正确吗?

c++ - 浮点运算 : why would order of addition matter?

c++ - 将 double 的位模式显示为十六进制?

math - float 学有问题吗?

c++ - 高效稳定的有序数之和

c - 我应该更好地使用全局变量吗?

c - 如何修改已传递给 C 函数的指针?

c - 在 C 中捕获浮点溢出

c++ - 为什么 cout 的默认精度不影响评估结果?