一个简单的算法问题.....

一个简单的算法问题.....

class SM
{
public static void main(String[] args)
{
double a=0.0,b=0.0,c=0.0,d=0.0;
System.out.println("Result as fallows:");
//for part-----------------------------------------------------------
System.out.println(" --for--");
for(a=0.0;a<=8.0;a+=0.5)
{
for (b = 0.0; b <= 8.0; b += 0.5)
{
for (c = 0.0; c <= 8.0; c += 0.5)
{
d = 8.0 - a - b - c;
if (a * b * c * d == 8.0 && a + b + c + d == 8.0)
{
System.out.print("==>>: ");
System.out.println("a=" + a + ",b=" + b + ",c=" + c + ",d=" + d);
//System.exit(0);
}
}
}
}
//while part-----------------------------------------------------------
System.out.println(" --while--");
a = 0.0; 数据挖掘交友
while (a <= 8.0)
{
b = 0.0;
while(b <= 8.0)
{
c = 0.0;
while(c <= 8.0)
{
d = 8.0 - a - b - c;
if (a * b * c * d == 8.0 && a + b + c + d == 8.0)
{
System.out.print("==>>: ");
System.out.println("a=" + a + ",b=" + b + ",c=" + c + ",d=" + d);
System.exit(0);
}
c+=0.1;
}
b+=0.1;
}
a+=0.1;
}
}
}

上面代码都是想要找出abcd的和与积都等于8的四个数

就好像 1 1 2 4 四个数 1+2+1+4=1*2*1*4=8

但是出现一个问题就是:

无论用for还是while循环,当a+=1.0步进和a+=0.5 0.25 步进

(也就是for(a=0.0;a<=8.0;a+=0.5){})

都可以求出结果就是

a=1.0,b=1.0,c=2.0,d=4.0 以及位置互换,

但如果将步进改成0.2 或 0.1 就得不到结果..这是为什么??

在C++里也是同样的问题!!救救...........

数据挖掘交友



以步进0.2 为例...如果每次判断和积时都输出abcd,

发现输出为(其中一个)a=7.80000000004,b=7.8000000004,c=7.8000000004,d=-15.40000000000013

这又是为什么??

将约束条件改成a<=8.0 b<=8.0-a c<=8.0-a-b 还是一样..
会出现一个小数点后若干位的误差!

double型存在误差
因为在计算机中二进制表示浮点数时会出现误差是难免的
尤其在各种算术运算中
你可以换一个
用java.math.BigDecimal类进行精确的浮点数操作就不会出错了

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:在VC中,怎样能派生一个类同时继承CWinThread和CWnd
下一篇:如何使用exe文件实现弹出一个网页(VB、VC、VF等的都可以)
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • 为帮助保护您的安全,Internet Explorer 已
  • 求一个用VC++编写的计算器源代码XX。最好是
  • Microsoft JET Database Engine (0x80040E1
  • Borland C++ 1999编写的软件,怎样破解?
  • 给我ICOKE13位字符
  • 求.c#net视频教程,北大青鸟32讲除外的,谢
  • c:\docume~/\yuc\locasi~/\temp\ge27-appco
  • 急求一个用C++编写的学生成绩管理系统源代
  • 谁有c#.net水晶报表电子教程?(赠送50分)
  • 有没有Microsoft Visual Studio .NET 2003
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
    数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静