一个简单的c语言程序,输出-1.#IND00..不知道哪里错
#include<stdio.h>#include<math.h>voidmain(){//输入一元二次方程的系数a,b,c,输出解x1,x2;doublea,b,c,q...
#include <stdio.h>
#include <math.h>
void main() {//输入一元二次方程的系数a,b,c,输出解x1,x2;
double a,b,c,q,x,y;
printf("请输入一元二次方程ax2+bx+c=0的系数abc,用逗号隔开\n");
scanf("a%lf,b%lf,c%lf",&a,&b,&c);
q = sqrt(b*b-4*a*c);
x = (-b-q)/(2*a);
y = (-b+q)/(2*a);
printf("解为x1=%lf,x2=%lf\n",x,y);
}
我在网上查了资料,说是可能原因1.除数为0,2.数据溢出
应该不是原因1吧,如果是数据溢出的话,能不能解释一下什么是数据溢出呢? 展开
#include <math.h>
void main() {//输入一元二次方程的系数a,b,c,输出解x1,x2;
double a,b,c,q,x,y;
printf("请输入一元二次方程ax2+bx+c=0的系数abc,用逗号隔开\n");
scanf("a%lf,b%lf,c%lf",&a,&b,&c);
q = sqrt(b*b-4*a*c);
x = (-b-q)/(2*a);
y = (-b+q)/(2*a);
printf("解为x1=%lf,x2=%lf\n",x,y);
}
我在网上查了资料,说是可能原因1.除数为0,2.数据溢出
应该不是原因1吧,如果是数据溢出的话,能不能解释一下什么是数据溢出呢? 展开
5个回答
展开全部
进行浮点数编程时,如果没有注意,常常会出现输出类似 1.#IND, 1.#INF 或者 nan, inf 之类奇怪的输出。这通常隐含了浮点数操作的异常。
特殊浮点数的含义
1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。
-1.#IND / nan:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate 的缩写,而"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。
简而言之,如果遇到 1.#INF / inf,就检查是否发生了运算结果溢出除零,而遇到 1.#IND / nan,就检查是否发生了非法的运算。
特殊浮点数的判断
很多 C 库都提供了一组函数用来判断一个浮点数是否是无穷大或 NaN。int _isnan(double x) 函数用来判断一个浮点数是否是 NaN,而 int _finite(double x) 用以判断一个浮点数是否是无穷大。
你可能已经注意到了,上面两个函数都是以下划线开头的,因此在可移植性上可能是存在问题的,那么如何实现一个通用的判断版本呢?首先,对于 Nan,可以用下面的代码实现:
bool IsNumber(double x)
{
// 这里的比较操作看上去总是会得到 true
// 但有趣的是对于 IEEE 754 浮点数 NaN 来说总会得到 false!
return (x == x);
}
而下面的代码可以判断一个浮点数是否是有限的(finite, 即既不是 NaN 又不是 infinite):
bool IsFiniteNumber(double x)
{
return (x <= DBL_MAX && x >= -DBL_MAX);
}
其中,DBL_MAX 是 <float.h> 中预定义的常量。
把上面两个函数结合起来,还可以实现一个浮点数是否是 Inf 的判断。
特殊浮点数的含义
1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。
-1.#IND / nan:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate 的缩写,而"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。
简而言之,如果遇到 1.#INF / inf,就检查是否发生了运算结果溢出除零,而遇到 1.#IND / nan,就检查是否发生了非法的运算。
特殊浮点数的判断
很多 C 库都提供了一组函数用来判断一个浮点数是否是无穷大或 NaN。int _isnan(double x) 函数用来判断一个浮点数是否是 NaN,而 int _finite(double x) 用以判断一个浮点数是否是无穷大。
你可能已经注意到了,上面两个函数都是以下划线开头的,因此在可移植性上可能是存在问题的,那么如何实现一个通用的判断版本呢?首先,对于 Nan,可以用下面的代码实现:
bool IsNumber(double x)
{
// 这里的比较操作看上去总是会得到 true
// 但有趣的是对于 IEEE 754 浮点数 NaN 来说总会得到 false!
return (x == x);
}
而下面的代码可以判断一个浮点数是否是有限的(finite, 即既不是 NaN 又不是 infinite):
bool IsFiniteNumber(double x)
{
return (x <= DBL_MAX && x >= -DBL_MAX);
}
其中,DBL_MAX 是 <float.h> 中预定义的常量。
把上面两个函数结合起来,还可以实现一个浮点数是否是 Inf 的判断。
展开全部
sqrt()的参数是负数的话,它会输出错误提示。
你输入的 a,b,c 三个值 进行 b*b-4*a*c 后可能是个负数。
你输入的 a,b,c 三个值 进行 b*b-4*a*c 后可能是个负数。
追问
我感到奇怪的就是,我输入的是1,2,1.还是出现这个1.#ind00..
好像输入任何数都是这个..
vc6下编译的..抓狂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,d,q,p,x1,x2;
printf("请输入一元二次方程系数abc");
scanf("%f%f%f",&a,&b,&c);
q=sqrt(b*b-4*a*c);
p=-b/(2*a);
d=q/(2*a);
x1 =p-d;
x2 =p+d;
printf("x1=%f,x2=%f\n",x1,x2);
}可以了,弄半天哦
#include <math.h>
void main()
{
float a,b,c,d,q,p,x1,x2;
printf("请输入一元二次方程系数abc");
scanf("%f%f%f",&a,&b,&c);
q=sqrt(b*b-4*a*c);
p=-b/(2*a);
d=q/(2*a);
x1 =p-d;
x2 =p+d;
printf("x1=%f,x2=%f\n",x1,x2);
}可以了,弄半天哦
追问
呃,我是定义的x和y当做x1和x2的啊
printf里面的x1和x2是输出的内容..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
当c=0是x=0,可能有数据溢出现象
更多追问追答
追问
但是我输入任何数值都出现错误啊..
追答
q = sqrt(b*b-4*a*c);
printf("1111\n");
x = (-b-q)/(2*a);
printf("2222\n");
y = (-b+q)/(2*a);
printf("3333\n");
你看屏幕上会显示什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询