我们需要做一些计算繁重的工作来连接Oracle数据库.到目前为止,我们已经在PL/SQL中进行了数值计算,并且很大程度上缺乏性能.
现在我们正在实施一个多级库存模型(https://www.researchgate.net/publication/222409130_Evaluation_of_time-varying_availability_in_multi-echelon_spare_parts_systems_with_passivation)由于问题的严重性,我更关注性能.
我用三种语言实现了部分算法:Fortran(90-2008符合gfortran),Excel中的VBA和PL/SQL,并围绕它进行了一百万次调用测试循环.即使使用binary_double数据类型和本机编译PLSQL_CODE_TYPE=NATIVE(两者都会导致改进),下面的测试代码仍然需要37秒才能运行(Oracle XE 11.2).相比之下,VBA在同一硬件上占用16s和Fortran 1.6s.
虽然要求性能接近Fortran数字可能太过分了(虽然这显然是非常需要的)但我很惊讶即使是不起眼的VBA也会执行PL/SQL.
所以我的问题有两个部分:
此外,虽然我不是直接批评我的源代码本身,但如果有人能发现任何我可以合并的明显优化,我将不胜感激.
该函数timeebo是测试函数,我select timeebo from dual;在SQL Developer中使用一个简单的函数调用它.
create or replace FUNCTION gammln(
    x IN binary_double)
  RETURN binary_double
IS
  --Lanczos' approximation to the Log Gamma function
  gammln binary_double;
  ser binary_double;
  tmp binary_double;
BEGIN
  tmp := x + 5.5;
  tmp :=(x + 0.5) * Ln(tmp) - tmp;
  ser := 1.000000000190015;
  ser := ser + 76.18009172947146 /(x + 1.0) ;
  ser := …我在Haskell中编写一个函数来处理超过32位int的数字.我找不到这种类型,我似乎在寻找错误的术语.
它需要能够保持大约2 ^ 40的数字,而不会损失任何精度
例:
addTwo :: Int -> Int -> Int
addTwo a b = a + b
main :: IO()
main = do
    putStrLn ( show ( addTwo 700851475143 1 ) )
GCC或类似的编译器执行旨在提高浮点运算的数值稳定性的优化.
众所周知,如果以明显的方式实现,看似简单的添加或计算向量范数的操作在数值上是不稳定的,另一方面,编译器有时为了速度优化而破坏这些问题的解决方法.
优化编译器输出以进行数值稳定计算的最新技术是什么?有什么比等待更好的?
我有一个来自mysql的excel导出,它应该显示一个包含17位数字(一个唯一的,数字,引用)的列的数据.使用PHPExcel时,除此参考之外的所有内容都显示正常.
我用过:
 $objPHPExcel->getActiveSheet()->getStyle('F'.$xlsRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER); 
接近但是......
比较Excel工作表中的值和数据库中的原始数据时,我看到引用的最后2位数字设置为00.
例如:
`20130829071002200` instead of `20130829071002210`
我尝试在setFormatCode和(PHPExcel_Style_NumberFormat ::)中设置其他(数字和非数字)格式,但是当使用STRING格式时我得到######,科学记数法(2,01308E + 16)在没有使用时或者TEXT格式或上面提到的输出(最后2位为零)
不知道我做错了什么......
任何帮助,将不胜感激.
我想知道是否可以将数字转换为相应的字母值.所以
1 -> a
2 -> b
我打算制作一个程序,列出用户指定的长度可能的所有字母组合.
看到我知道除了这个之外如何构建程序的其余部分!任何帮助都会很精彩.
标题说明了一切:我想用matlab计算一个带有大数字的指数,但是我得到了溢出,它只返回无穷大.
>> 100^1000
ans =
   Inf
我上次检查时,100 ^ 1000明显小于无穷大:)
正如问题标题所示,我想知道为什么编译R代码(使用compiler::cmpfun)的字节比以下数学函数的等效Rcpp代码更快:
func1 <- function(alpha, tau, rho, phi) {
     abs((alpha + 1)^(tau) * phi - rho * (1- (1 + alpha)^(tau))/(1 - (1 + alpha)))
}
由于这是一个简单的数值运算,我原本期望Rcpp(funcCpp和funcCpp2)比编译的R(func1c和func2c)字节快得多,特别是因为R会有更多的开销用于存储(1+alpha)**tau或需要重新计算它.事实上,计算这个指数两次似乎比R(func1cvs func2c)中的内存分配更快,这似乎特别违反直觉,因为n它很大.我的另一个猜测是,也许compiler::cmpfun是在扯掉一些魔法,但我想知道是否确实如此.
真的,我想知道的两件事是:
为什么funcCpp和funcCpp2比func1c和func2c慢?(Rcpp比编译的R函数慢)
为什么funcCpp比func2慢?(Rcpp代码比纯R慢)
FWIW,这是我的C++和R版本数据
user% g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 7.0.0 (clang-700.0.72)
Target: x86_64-apple-darwin14.3.0
Thread model: posix
user% R --version
R version 3.2.2 (2015-08-14) -- "Fire Safety"
Copyright (C) 2015 …这是我在stackoverflow上的第一篇文章,我遇到以下代码中的错误,在firefox中的inspect元素/ JS控制台中没有显示错误,但由于某种原因,计算后的输出显示未定义/ NaN错误.用户的输入在Float中解析.
码:
function costtoShip(){
    // get input 
    var weight = parseFloat(document.getElementById("weight")).value ;
    var msg;
    var cost;
    var subtotal;
    // calculation
    if ( weight >= 0.00 && weight <= 150.00 ) {
        cost = 20.00;
    }
    else if ( weight >= 151.00 && weight <= 300.00 ) {
        cost = 15.00;
    }
    else if ( weight >= 301.00 && weight <= 400.00 ) {
        cost = 10.00;
    }    
   subtotal = weight * cost ;
   msg = "<div> Total Weight …第一个公式
m = (a + b) / 2
很简单,但是有很大的溢出风险。此外,Burden and Faires的《第9版数值分析》指出:
当b-a接近机器的最大精度时,(a + b)/ 2可能返回一个中间点,该中间点甚至不在[a,b]区间内。
尽管没有提供进一步的解释。
第二个
m = a + (b - a) / 2
也是正确的,溢出的可能性较小。但是对于浮点数,a和b几乎相等的值可能会导致重要性下降。
那么,哪种公式在实践中更好?另外,将理解对引用语句的解释。
numerical ×10
performance ×2
alphabetical ×1
binary ×1
c# ×1
c++ ×1
format ×1
haskell ×1
ieee-754 ×1
integer ×1
javascript ×1
matlab ×1
nan ×1
numeric ×1
optimization ×1
oracle ×1
php ×1
phpexcel ×1
plsql ×1
python ×1
python-3.x ×1
r ×1
rcpp ×1
types ×1
undefined ×1