考虑一下Python中的这种划分:Python3.1(r31:73574,Jun262009,20:21:35)[MSCv.150032bit(Intel)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>2/21.0这是故意的吗?我强烈记得返回int/int=int的早期版本。我应该怎么办?是否有新的除法运算符或者我必须始终转换?在2.x中,这种行为确实是相反的;见HowcanIforcedivisiontobefloatingpoint?Divisionkeepsroundingdown
这个问题在这里已经有了答案:Intdivision:Whyistheresultof1/3==0?(19个回答)关闭4年前.这是一个基本问题,但我找不到答案。我研究了浮点算术和其他一些主题,但似乎没有任何东西可以解决这个问题。我确定我只是用了错误的术语。基本上,我想取两个数量-已完成和总计-并将它们除以得出一个百分比(已完成的数量)。数量是longs。这是设置:longcompleted=25000;longtotal=50000;System.out.println(completed/total);//Prints0我尝试将结果重新分配给double-它打印0.0。我哪里错了?顺便
我正在编写这段代码:publicstaticvoidmain(String[]args){doubleg=1/3;System.out.printf("%.2f",g);}结果为0。这是为什么,我该如何解决这个问题? 最佳答案 两个操作数(1和3)是整数,因此使用整数算术(这里是除法)。将结果变量声明为double只会导致在除法之后发生隐式转换。整数除法当然会返回四舍五入到零的除法结果。0.333...的结果因此在这里向下舍入为0。(请注意,处理器实际上并没有进行任何舍入,但您仍然可以这样想。)另外,请注意,如果两个操作数(数字)都
编码是否有任何(非微优化)性能提升floatf1=200f/2对比floatf2=200f*0.5几年前我的一位教授告诉我,浮点除法比浮点乘法慢,但没有详细说明原因。这种说法是否适用于现代PC架构?更新1关于评论,请同时考虑这种情况:floatf1;floatf2=2floatf3=3;for(i=0;i更新2引用评论:[Iwant]toknowwhatarethealgorithmic/architecturalrequirementsthatcause>divisiontobevastlymorecomplicatedinhardwarethanmultiplication
这个问题在这里已经有了答案:Floatingpointdivisionvsfloatingpointmultiplication(7个回答)ShouldIusemultiplicationordivision?(25个回答)关闭9年前。在C/C++中,您可以设置以下代码:doublea,b,c;...c=(a+b)/2;这与以下内容完全相同:c=(a+b)*0.5;我想知道哪个更好用。从根本上说,一种操作是否比另一种更快? 最佳答案 乘法比除法快。在大学里,我被告知除法是乘法的六倍。实际的时序取决于架构,但一般来说,乘法永远不会像除
我最近遇到了anissue这可以使用模除法轻松解决,但输入是float:Givenaperiodicfunction(e.g.sin)andacomputerfunctionthatcanonlycomputeitwithintheperiodrange(e.g.[-π,π]),makeafunctionthatcanhandleanyinput.“显而易见”的解决方案类似于:#includefloatsin(floatx){returnlimited_sin((x+M_PI)%(2*M_PI)-M_PI);}为什么这不起作用?我收到此错误:error:invalidoperandso
我只是想知道,如果我想将a除以b,并且对结果c和余数都感兴趣(例如,假设我有秒数并想将其分成分钟和秒),那么什么是最好的方法?会不会intc=(int)a/b;intd=a%b;或intc=(int)a/b;intd=a-b*c;或doubletmp=a/b;intc=(int)tmp;intd=(int)(0.5+(tmp-c)*b);或也许有一种神奇的功能可以同时提供两者? 最佳答案 在x86上,余数是除法本身的副产品,因此任何半体面的编译器都应该能够只使用它(而不是再次执行div)。这可能也在其他架构上完成。Instructi
总结:我正在寻找最快的计算方法(int)x/(int)yy==0没有异常。相反,我只想要一个任意的结果。背景:在编码图像处理算法时,我经常需要除以(累积的)alpha值。最简单的变体是带有整数运算的纯C代码。我的问题是,对于alpha==0的结果像素,我通常会得到除以零的错误。然而,这正是结果无关紧要的像素:我不关心alpha==0的像素的颜色值。详情:我正在寻找类似的东西:result=(y==0)?0:x/y;或result=x/MAX(y,1);x和y是正整数。代码在嵌套循环中执行了很多次,所以我正在寻找一种方法来摆脱条件分支。当y不超过字节范围时,我对解决方案感到满意unsig
使用一个比另一个有好处吗?在Python2中,它们似乎都返回相同的结果:>>>6/32>>>6//32 最佳答案 在Python3.x中,5/2将返回2.5并且5//2将返回2。前者为浮点除法,后者为地板除法,有时也称为整数除法。p>在Python2.2或更高版本的2.x行中,整数没有区别,除非您执行from__future__importdivision,这会导致Python2.x采用3.x行为.不管以后导入,5.0//2都会返回2.0,因为这是运算的地板除法结果。您可以在PEP238:ChangingtheDivisionOpe
我有两个整数值a和b,但我需要它们的浮点比率。我知道a我想计算a/b,所以如果我使用整数除法,我总是会得到0,余数为a.如何强制c在下面的Python2中是float?c=a/b在3.x中,行为是相反的;见Whydoesintegerdivisionyieldafloatinsteadofanotherinteger?对于相反的3.x特定问题。 最佳答案 在Python2中,两个整数相除产生一个整数。在Python3中,它产生一个float。我们可以通过从__future__导入来获得新的行为。>>>from__future__im