标签: numerical

PL/SQL或替代方案的数值优化

我们需要做一些计算繁重的工作来连接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.

所以我的问题有两个部分:

  1. 还有什么我可以尝试在Oracle方面进一步提高性能吗?
  2. 如果我们考虑摆脱PL/SQL,我们应该考虑哪些替代方案来连接Oracle数据库?虽然接近Fortran速度的性能提升将使我们考虑在应用程序的交互式部分中引入一些繁重的工作,但是繁重的工作将以类似批处理的方式被称为相对较少.我首选的数值工作语言仍然是Fortran,因为它易于实现带有屏蔽的多维数组.

此外,虽然我不是直接批评我的源代码本身,但如果有人能发现任何我可以合并的明显优化,我将不胜感激.

该函数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 := …
Run Code Online (Sandbox Code Playgroud)

oracle optimization performance numerical plsql

6
推荐指数
1
解决办法
288
查看次数

Haskell 64位数字类型

我在Haskell中编写一个函数来处理超过32位int的数字.我找不到这种类型,我似乎在寻找错误的术语.

它需要能够保持大约2 ^ 40的数字,而不会损失任何精度

例:

addTwo :: Int -> Int -> Int
addTwo a b = a + b

main :: IO()
main = do
    putStrLn ( show ( addTwo 700851475143 1 ) )
Run Code Online (Sandbox Code Playgroud)

numerical haskell types integer

5
推荐指数
2
解决办法
1665
查看次数

用于数值稳定性的编译器优化

GCC或类似的编译器执行旨在提高浮点运算的数值稳定性的优化.

众所周知,如果以明显的方式实现,看似简单的添加或计算向量范数的操作在数值上是不稳定的,另一方面,编译器有时为了速度优化而破坏这些问题的解决方法.

优化编译器输出以进行数值稳定计算的最新技术是什么?有什么比等待更好的?

numerical compiler-optimization

5
推荐指数
1
解决办法
194
查看次数

如何以2个字节保存浮点数?

是的我知道IEEE-754半精度标准,是的,我知道在该领域所做的工作.非常简单地说,我试图只用2个字节保存一个简单的浮点数(比如52.1,或1.25).

我已尝试过JavaC#中的一些实现,但是它们通过解码不同的数字来破坏输入值.你可以在32.1编码解码后输入和输入32.0985.

有没有什么方法可以在不破坏输入值的情况下以16位存储浮点数?

非常感谢.

c# floating-point binary numerical ieee-754

5
推荐指数
3
解决办法
2万
查看次数

PHPExcel数字格式无法正确显示

我有一个来自mysql的excel导出,它应该显示一个包含17位数字(一个唯一的,数字,引用)的列的数据.使用PHPExcel时,除此参考之外的所有内容都显示正常.

我用过: $objPHPExcel->getActiveSheet()->getStyle('F'.$xlsRow)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER); 接近但是......

比较Excel工作表中的值和数据库中的原始数据时,我看到引用的最后2位数字设置为00.

例如:

`20130829071002200` instead of `20130829071002210`
Run Code Online (Sandbox Code Playgroud)

我尝试在setFormatCode和(PHPExcel_Style_NumberFormat ::)中设置其他(数字和非数字)格式,但是当使用STRING格式时我得到######,科学记数法(2,01308E + 16)在没有使用时或者TEXT格式或上面提到的输出(最后2位为零)

不知道我做错了什么......

任何帮助,将不胜感激.

php format numerical number-formatting phpexcel

5
推荐指数
1
解决办法
5293
查看次数

使用Python将数字转换为相应的字母

我想知道是否可以将数字转换为相应的字母值.所以

1 -> a
2 -> b
Run Code Online (Sandbox Code Playgroud)

我打算制作一个程序,列出用户指定的长度可能的所有字母组合.

看到我知道除了这个之外如何构建程序的其余部分!任何帮助都会很精彩.

python numerical alphabetical python-3.x

5
推荐指数
5
解决办法
3万
查看次数

如何在没有inf的情况下在matlab中计算指数?

标题说明了一切:我想用matlab计算一个带有大数字的指数,但是我得到了溢出,它只返回无穷大.

>> 100^1000

ans =

   Inf
Run Code Online (Sandbox Code Playgroud)

我上次检查时,100 ^ 1000明显小于无穷大:)

matlab numerical numeric

5
推荐指数
2
解决办法
2581
查看次数

为什么这个Rcpp代码慢于字节编译R?

正如问题标题所示,我想知道为什么编译R代码(使用compiler::cmpfun)的字节比以下数学函数的等效Rcpp代码更快:

func1 <- function(alpha, tau, rho, phi) {
     abs((alpha + 1)^(tau) * phi - rho * (1- (1 + alpha)^(tau))/(1 - (1 + alpha)))
}
Run Code Online (Sandbox Code Playgroud)

由于这是一个简单的数值运算,我原本期望Rcpp(funcCppfuncCpp2)比编译的R(func1cfunc2c)字节快得多,特别是因为R会有更多的开销用于存储(1+alpha)**tau或需要重新计算它.事实上,计算这个指数两次似乎比R(func1cvs func2c)中的内存分配更快,这似乎特别违反直觉,因为n它很大.我的另一个猜测是,也许compiler::cmpfun是在扯掉一些魔法,但我想知道是否确实如此.

真的,我想知道的两件事是:

  1. 为什么funcCpp和funcCpp2比func1c和func2c慢?(Rcpp比编译的R函数慢)

  2. 为什么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 …
Run Code Online (Sandbox Code Playgroud)

c++ performance numerical r rcpp

5
推荐指数
1
解决办法
706
查看次数

输出中未定义/ NaN错误

这是我在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 …
Run Code Online (Sandbox Code Playgroud)

javascript numerical nan undefined

5
推荐指数
1
解决办法
752
查看次数

浮点数的最佳中点公式是什么?

第一个公式

m = (a + b) / 2
Run Code Online (Sandbox Code Playgroud)

很简单,但是有很大的溢出风险。此外,Burden and Faires的《第9版数值分析》指出:

当b-a接近机器的最大精度时,(a + b)/ 2可能返回一个中间点,该中间点甚至不在[a,b]区间内。

尽管没有提供进一步的解释。

第二个

m = a + (b - a) / 2
Run Code Online (Sandbox Code Playgroud)

也是正确的,溢出的可能性较小。但是对于浮点数,a和b几乎相等的值可能会导致重要性下降。

那么,哪种公式在实践中更好?另外,将理解对引用语句的解释。

numerical numerical-analysis

5
推荐指数
1
解决办法
185
查看次数