好久没用C了,居然报个奇怪的问题....急用,求各位高手帮忙

iamltd 2004-11-21 11:31:20
数据是这样的
float ans[j][mdu+2];当然实际不会这样定义的哈.我拿malloc分配的
float te;

这样处理了一下以后
*(ans + i*(mdu+2) + j) -= *(ans + i*(mdu+2) + aft) * *(ans + be*(mdu+2) + j) / te;
想把太小的数处理成0
if(fabs(*(ans + i*(mdu+2) + j))<1e-6)*(ans + i*(mdu+2) + j)=0;
结果运行到这句话老报错.Floating point error:Domain.

到底是什么错啊??


急用,求各位高手帮忙
...全文
405 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamltd 2004-11-26
  • 打赏
  • 举报
回复
多谢各位大大哈.终于知道哪儿错了
我没有include <math.h>
居然编译不报错!!!

汗.....

maddevil 2004-11-23
  • 打赏
  • 举报
回复
float ans[j][mdu+2];当然实际不会这样定义的哈.我拿malloc分配的
*(ans + i*(mdu+2) + j)
>> ans 是什么类型??
xunknown 2004-11-22
  • 打赏
  • 举报
回复
if(fabs(*(ans + i*(mdu+2) + j))<1e-6)*(ans + i*(mdu+2) + j)=0;
而且你这句话本来就是错误的!
简单点就是:
if ( fabs(K) < zero ) * (A) = 0

其中
K = *(ans + i*(mdu+2) + j);
zero = 1e-6;
A = (ans + i*(mdu+2) + j);

然后再简单点:
if M*A = 0
其中:
M = fabs( K ) < zero ;

////

是不是你的表达式有错误啊?
xunknown 2004-11-22
  • 打赏
  • 举报
回复
*(ans + i*(mdu+2) + j) ==???????????
你这个是什么意思啊???
你是想取ans[i][mdu+2]这个元素的值吗?
为什么要+j ?
Leaveye 2004-11-22
  • 打赏
  • 举报
回复
这很可能与运行时的值有关。或者发赋值代码出来,或者在这方面仔细查一下。
llmingjie 2004-11-22
  • 打赏
  • 举报
回复
if(fabs(*(ans + i*(mdu+2) + j))<1e-6) * (ans + i*(mdu+2) + j) = 0;

这句话怎么理解?会不会是问题
xunknown 2004-11-22
  • 打赏
  • 举报
回复
上面搞错了。
应该是:
two[i][j] = *( two + i*N + j );
xunknown 2004-11-22
  • 打赏
  • 举报
回复
二维数组指针访问的方式:
int two[N][M];
访问元素two[i][j]可以使用指针在方式访问,其中 0<= i <N,0<=j<M.
two[i][j] == *( two + i*j );

Flood1984 2004-11-22
  • 打赏
  • 举报
回复
Floating point error:Domain.
除数为0
eduhf_123 2004-11-22
  • 打赏
  • 举报
回复
将if(fabs(*(ans + i*(mdu+2) + j))<1e-6) *(ans + i*(mdu+2) + j)=0;改为如下:
(int)temp=fabs( *(ans+i*(mdu+2)+j) )<1e-6 ? ( *(ans + i*(mdu+2) + j)=0 ):0;
试试看……
pacman2000 2004-11-22
  • 打赏
  • 举报
回复
在if之前把这个*(ans + i*(mdu+2) + j)显示出来看看,究竟是多少。
iamltd 2004-11-22
  • 打赏
  • 举报
回复
to xunknown(爱你是我一生中理想)

访问一个2维数组,a[i][j]和*(a+i*维数+j)该是一样的吧?
iamltd 2004-11-22
  • 打赏
  • 举报
回复
if(fabs(*(ans + i*(mdu+2) + j))<1e-6) *(ans + i*(mdu+2) + j)=0;
后面那个*(ans + i*(mdu+2) + j)确实是想访问ans[i][j]的值.因为我没有声明成2维数组,用ans[i][j]会报错.

IF的意思是,如果*(ans + i*(mdu+2) + j)接近0,就把它改成0.

各位大大帮帮忙啊
pacman2000 2004-11-22
  • 打赏
  • 举报
回复
看得莫名奇妙。。。把if的条件改清楚一点吧。
qingyuan18 2004-11-22
  • 打赏
  • 举报
回复
加一句试试:
float *p = ans;
积木 2004-11-22
  • 打赏
  • 举报
回复
我看是最后的那个=号闹得
ocpbase 2004-11-22
  • 打赏
  • 举报
回复
if(fabs(*(ans + i*(mdu+2) + j))<1e-6)*(ans + i*(mdu+2) + j)=0;

少了括号?
赋值号本意是等价号?没说清楚.
dudu妈 2004-11-22
  • 打赏
  • 举报
回复
up
coyprightbao 2004-11-22
  • 打赏
  • 举报
回复
mark!
aa1298 2004-11-22
  • 打赏
  • 举报
回复
加一句试试:float *p = ans;
加载更多回复(11)

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧