3/2的问题..求助

93年颈椎病人 2013-05-08 11:58:43
int i = 3;
int j = 2 ;

float ss = i/j;

double avg = (2/(2+1.33))*ss + (1.33/(2+1.33))*1.0050313201749201;

double avg1= (2/(2+1.33))*i/j + (1.33/(2+1.33))*1.0050313201749201;



System.out.println((ss) +" ss");
System.out.println(avg);
System.out.println((i/j) +" i/j");
System.out.println(avg1);
打印结果 :


1.0 ss
1.0020095062560492
1 i/j
1.3023098065563494


为什么 avg 跟avg1的数会差0.3?

...全文
282 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
拾薪 2013-05-09
  • 打赏
  • 举报
回复
引用 4 楼 lcf 的回复:
[quote=引用 3 楼 q826qq1878 的回复:] 3楼正解. 谢谢
谁说是正解。当i和j都是float的时候,结果是一样的。这里有一个类型转换的问题。ss = i / j,i和j都是int,那么ss就是1,但是你把i和j改成float,结果就一样了,这时候ss=3/2 = 0.666666666...。 假设这不是计算机而是在纸上算,a * b / c = a * b * 1/c,然后有个东西叫乘法结合律,先算谁都一样。根本原因是Java有int/int 会取整[/quote] 这个才是正解,就是截取的问题!
lcf 2013-05-08
  • 打赏
  • 举报
回复
引用 3 楼 q826qq1878 的回复:
3楼正解. 谢谢
谁说是正解。当i和j都是float的时候,结果是一样的。这里有一个类型转换的问题。ss = i / j,i和j都是int,那么ss就是1,但是你把i和j改成float,结果就一样了,这时候ss=3/2 = 0.666666666...。 假设这不是计算机而是在纸上算,a * b / c = a * b * 1/c,然后有个东西叫乘法结合律,先算谁都一样。根本原因是Java有int/int 会取整
93年颈椎病人 2013-05-08
  • 打赏
  • 举报
回复
3楼正解. 谢谢
失落夏天 2013-05-08
  • 打赏
  • 举报
回复
(2/(2+1.33))*ss (2/(2+1.33))*i/j 你觉得这一样么? 第一个是a*(i/j) 第二个是(a*i)/j
跳蚤图 2013-05-08
  • 打赏
  • 举报
回复
为什么????
书断华 2013-05-08
  • 打赏
  • 举报
回复
这个感觉就是一个数据转换的时候丢失的那一部分照成的误差
andycpp 2013-05-08
  • 打赏
  • 举报
回复
3楼正解? 谁是3楼?
Ada168855 2013-05-08
  • 打赏
  • 举报
回复
float ss = i/j;这个ss是i/j的结果 double avg = (2/(2+1.33))*ss + (1.33/(2+1.33))*1.0050313201749201; 这个是直接乘以ss,即乘以i/j的结果 double avg1= (2/(2+1.33))*i/j + (1.33/(2+1.33))*1.0050313201749201; 而这里是先乘以i然后再除以j
bjh1988 2013-05-08
  • 打赏
  • 举报
回复
。。。。。。。。。 好深奥的问题啊
yongtaimen 2013-05-08
  • 打赏
  • 举报
回复
我勒个去。。。。。
lcf 2013-05-08
  • 打赏
  • 举报
回复
引用 9 楼 m243723424 的回复:
[quote=引用 8 楼 lcf 的回复:] [quote=引用 6 楼 m243723424 的回复:] [quote=引用 4 楼 lcf 的回复:] [quote=引用 3 楼 q826qq1878 的回复:] 3楼正解. 谢谢
谁说是正解。当i和j都是float的时候,结果是一样的。这里有一个类型转换的问题。ss = i / j,i和j都是int,那么ss就是1,但是你把i和j改成float,结果就一样了,这时候ss=3/2 = 0.666666666...。 假设这不是计算机而是在纸上算,a * b / c = a * b * 1/c,然后有个东西叫乘法结合律,先算谁都一样。根本原因是Java有int/int 会取整[/quote] 加入都是int类型的话运算顺序不同结果也不同 比如i=2;j=3;k=2 int a=i*j/k; int b=i*(j/k); 这两个一样吗?[/quote] 你把j改成4就一样了[/quote]我只是想表达“然后有个东西叫乘法结合律,先算谁都一样。”是不对的[/quote] 我说了乘法结合律的前提是在纸上而不是在计算机里计算
胖名 2013-05-08
  • 打赏
  • 举报
回复
唉!这问题,,,
fei1710 2013-05-08
  • 打赏
  • 举报
回复
关键是理解类型提升跟操作数有关,跟最后赋值类型无关。 float ss = i/j; 此处i j类型为整形。 (2/(2+1.33))*i/j 此处i j类型为double型
Bettygonna 2013-05-08
  • 打赏
  • 举报
回复
引用 8 楼 lcf 的回复:
[quote=引用 6 楼 m243723424 的回复:] [quote=引用 4 楼 lcf 的回复:] [quote=引用 3 楼 q826qq1878 的回复:] 3楼正解. 谢谢
谁说是正解。当i和j都是float的时候,结果是一样的。这里有一个类型转换的问题。ss = i / j,i和j都是int,那么ss就是1,但是你把i和j改成float,结果就一样了,这时候ss=3/2 = 0.666666666...。 假设这不是计算机而是在纸上算,a * b / c = a * b * 1/c,然后有个东西叫乘法结合律,先算谁都一样。根本原因是Java有int/int 会取整[/quote] 加入都是int类型的话运算顺序不同结果也不同 比如i=2;j=3;k=2 int a=i*j/k; int b=i*(j/k); 这两个一样吗?[/quote] 你把j改成4就一样了[/quote]我只是想表达“然后有个东西叫乘法结合律,先算谁都一样。”是不对的
lcf 2013-05-08
  • 打赏
  • 举报
回复
引用 6 楼 m243723424 的回复:
[quote=引用 4 楼 lcf 的回复:] [quote=引用 3 楼 q826qq1878 的回复:] 3楼正解. 谢谢
谁说是正解。当i和j都是float的时候,结果是一样的。这里有一个类型转换的问题。ss = i / j,i和j都是int,那么ss就是1,但是你把i和j改成float,结果就一样了,这时候ss=3/2 = 0.666666666...。 假设这不是计算机而是在纸上算,a * b / c = a * b * 1/c,然后有个东西叫乘法结合律,先算谁都一样。根本原因是Java有int/int 会取整[/quote] 加入都是int类型的话运算顺序不同结果也不同 比如i=2;j=3;k=2 int a=i*j/k; int b=i*(j/k); 这两个一样吗?[/quote] 你把j改成4就一样了
Mourinho 2013-05-08
  • 打赏
  • 举报
回复
 
  int i = 3;
  int j = 2 ;
  float a = i / j;//1.5
  int b = i / j;//1
上述两者相差1/2,再乘上(2/(2+1.33)),最后相差0.3
Bettygonna 2013-05-08
  • 打赏
  • 举报
回复
引用 4 楼 lcf 的回复:
[quote=引用 3 楼 q826qq1878 的回复:] 3楼正解. 谢谢
谁说是正解。当i和j都是float的时候,结果是一样的。这里有一个类型转换的问题。ss = i / j,i和j都是int,那么ss就是1,但是你把i和j改成float,结果就一样了,这时候ss=3/2 = 0.666666666...。 假设这不是计算机而是在纸上算,a * b / c = a * b * 1/c,然后有个东西叫乘法结合律,先算谁都一样。根本原因是Java有int/int 会取整[/quote] 加入都是int类型的话运算顺序不同结果也不同 比如i=2;j=3;k=2 int a=i*j/k; int b=i*(j/k); 这两个一样吗?
Bettygonna 2013-05-08
  • 打赏
  • 举报
回复
一,运算法则不对 第二,你第二个算式是i/j是int型数据的运算,结果还是int型所以结果不一样啊!
内容概要:本文提出了一种基于场景概率的含可再生能源数据中心园区容量配置与日调度协同优化策略,旨在应对可再生能源出力与算力负载双重不确定性。通过构建多场景模拟真实波动情况,并引入多元宇宙优化算法(MVO)进行高效求解,实现了数据中心园区内风、光、储等设备的容量优化配置与多时间尺度日调度计划的协同决策,最终有效降低了系统综合成本,提升了可再生能源消纳率与运行可靠性。该策略充分考虑了源-荷-储多要素间的复杂耦合关系,为高比例可再生能源接入的数据中心提供了科学的规划与运行理论支撑。; 适合人群:具备电力系统、能源管理或优化算法基础知识的科研人员、研究生及从事数据中心能源规划的工程技术人员。; 使用场景及目标:①为含高比例可再生能源的数据中心园区提供科学的容量规划与运行调度方案;②研究多元宇宙优化算法在复杂混合整数非线性规划问题中的应用效能;③探索源-荷-储多要素协同优化机制,以提升能源系统的经济性、可持续性与韧性。; 阅读建议:此资源提供了完整的Matlab代码实现,建议读者在深入理解模型构建原理与数学推导的基础上,动手运行和调试代码,重点关注场景生成方法、目标函数设计、约束条件处理以及MVO算法的实现流程,以便透彻掌握该优化策略的核心技术细节与工程应用价值。
内容概要:本文围绕“风光制氢合成氨系统优化研究”展开,基于Cplex求解器,利用Matlab代码实现了对风能、光伏等可再生能源耦合制氢进而合成氨的综合能源系统的优化建模与求解。研究重点在于构建系统各环节(风光发电、电解水制氢、氢气储存、合成氨生产)的数学模型,综合考虑设备投资、运行维护、能源转换效率及碳排放等多重因素,建立以系统全生命周期经济性最优或兼顾环境效益的多目标优化模型,并通过Cplex高效求解,旨在为绿氢及绿色化工品的生产提供科学的规划与运行决策支持。该研究不仅展示了从可再生能源到高附加值化工产品的完整技术链条,也为实现“双碳”目标下的新型能源体系构建提供了重要的理论依据和实践路径。; 适合人群:具备Matlab编程基础、对能源系统建模、优化算法(尤其是线性/混合整数规划)有一定了解的研究生、科研人员及能源领域工程师。; 使用场景及目标:① 学习如何将复杂的综合能源系统(风光-氢-氨)转化为可计算的数学优化模型;② 掌握利用Matlab调用Cplex求解器解决大规模优化问题的方法;③ 研究可再生能源制氢及下游化工应用的经济性与可行性。; 阅读建议:此资源侧重于科研论文的复现,建议读者结合相关领域的专业知识,仔细研读模型的构建逻辑与代码实现细节,并尝试修改参数或模型结构以加深理解。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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