jjzjj

windows - MulDiv 是否比存储已知值和在其他代码中进行数学计算效率低

我正在使用Delphi2007并开发一些演示软件。我正在研究的当前模块是视频的过渡过滤器。我正在使用的转换代码(TPicShow的PSEffects单元)需要基于帧尺寸和转换进度的X和Y值。这是代码TypeTPercent=0..100;varATo:TBitmap;//Prog:Integer;//ProgressofthetransitionifATo.Width>=ATo.HeightthenbeginX:=MulDiv(ATo.Width,Prog,High(TPercent));Y:=MulDiv(X,ATo.Height,ATo.Width);endelsebeginY:=

java - (a * b)/c MulDiv 和处理中间乘法溢出

我需要做以下算术:longa,b,c;longresult=a*b/c;虽然结果保证适合long,但乘法不是,所以它可能会溢出。我试着一步一步地做(先乘后除),同时通过将a*b的中间结果拆分成一个最大为4的int数组(much就像BigInteger正在使用它的int[]mag变量一样)。在这里,我被部门困住了。我无法理解进行精确除法所需的位移位。我只需要商(不需要余数)。假设的方法是:publicstaticlongdivide(int[]dividend,longdivisor)此外,我不考虑使用BigInteger,因为这部分代码需要快速(我想坚持使用基元和基元数组)。如有任何帮

c++ - 是否有与 Linux 的 MulDiv 等效的功能?

MulDivWindowsAPI中的便利函数等同于(a*b)/c,但它将a*b的中间结果存储在一个64位变量中在除以c之前避免整数溢出,其中a*b大于MAX_INT但(a*b)/c不是。WINBASEAPIintWINAPIMulDiv(_In_intnNumber,_In_intnNumerator,_In_intnDenominator);在Linux中编程时,是否有等效的便捷功能? 最佳答案 Linux好像没有对应的功能我创建了一个简单的内联函数(尽管我还没有用64位编译测试过它)inlineintmul_div(intnum

c++ - 是否有与 Linux 的 MulDiv 等效的功能?

MulDivWindowsAPI中的便利函数等同于(a*b)/c,但它将a*b的中间结果存储在一个64位变量中在除以c之前避免整数溢出,其中a*b大于MAX_INT但(a*b)/c不是。WINBASEAPIintWINAPIMulDiv(_In_intnNumber,_In_intnNumerator,_In_intnDenominator);在Linux中编程时,是否有等效的便捷功能? 最佳答案 Linux好像没有对应的功能我创建了一个简单的内联函数(尽管我还没有用64位编译测试过它)inlineintmul_div(intnum

c++ - 在 64 位中进行组合乘除运算的最准确方法是什么?

在32位和64位程序(在VisualC++中)中,我可以对64位整数进行乘除运算的最准确方法是什么?(如果溢出,我需要结果mod264。)(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序。)显然,转换为double并返回是可能的,但我想知道是否有一种不太复杂的更准确的方法。(即我不是在这里寻找任意精度的算术库!) 最佳答案 由于这被标记为VisualC++,我将给出一个滥用MSVC特定内在函数的解决方案。这个例子相当复杂。它是GMP和java.math.BigInteger用于大除法的同一算法的高度

c++ - 在 64 位中进行组合乘除运算的最准确方法是什么?

在32位和64位程序(在VisualC++中)中,我可以对64位整数进行乘除运算的最准确方法是什么?(如果溢出,我需要结果mod264。)(我正在寻找类似MulDiv64的东西,除了这个使用内联汇编,它只适用于32位程序。)显然,转换为double并返回是可能的,但我想知道是否有一种不太复杂的更准确的方法。(即我不是在这里寻找任意精度的算术库!) 最佳答案 由于这被标记为VisualC++,我将给出一个滥用MSVC特定内在函数的解决方案。这个例子相当复杂。它是GMP和java.math.BigInteger用于大除法的同一算法的高度