标签: numeric

从Azavea Numeric获取隐式scala数字

我使用Azavea Numeric Sc​​ala库进行通用数学运算.但是,我不能将它们与Scala Collections API一起使用,因为它们需要一个scala Numeric,看起来好像两个Numerics是互斥的.有什么方法可以避免重新实现对Azavea Numeric的Scala Collections的所有数学运算,除了要求所有类型都有Numerics的上下文边界?

import Predef.{any2stringadd => _, _}

class Numeric {
  def addOne[T: com.azavea.math.Numeric](x: T) {
    import com.azavea.math.EasyImplicits._
    val y = x + 1 // Compiles

    val seq = Seq(x)
    val z = seq.sum // Could not find implicit value for parameter num: Numeric[T]
  }
}
Run Code Online (Sandbox Code Playgroud)

Azavea Numeric定义为

trait Numeric[@scala.specialized A] extends java.lang.Object with 

com.azavea.math.ConvertableFrom[A] with com.azavea.math.ConvertableTo[A] with scala.ScalaObject {
   def abs(a:A):A
   ...remaining methods redacted...
}

object Numeric {
  implicit object IntIsNumeric extends IntIsNumeric
  implicit …
Run Code Online (Sandbox Code Playgroud)

generics scala numeric

8
推荐指数
1
解决办法
514
查看次数

在Haskell中覆盖fromInteger

所以我喜欢Haskell,但我对Num课程不满意.所以我想为代数类型创建自己的类型类层次结构.
问题是,即使我导入Prelude隐藏Num以及与之相关的所有内容,仍然使文字1具有类型t的唯一方法是使t实例为Num.
我很乐意从整个班级制作自己的东西,并将Num完全排除在外,就像这样

import Prelude hiding (everything having to do with Num)
import qualified Prelude (everything having to do with Num)

class (Eq fi) => FromInteger fi where
  fromInteger :: Integral -> fi

foo :: (FromInteger fi) => fi -> String
foo 1 = "that was a one"
foo 0 = "that was a zero"
foo n = "that was neither zero nor one"
Run Code Online (Sandbox Code Playgroud)

然后我会适当地为整个类型实现fromInteger,而不必对Num说任何话.

有没有办法告诉解析器使用不同的fromInteger方法?

谢谢!

haskell numeric typeclass

8
推荐指数
1
解决办法
866
查看次数

哪种数值类型转换更适合简单的数学运算?

我想知道哪种转换对于简单的数学运算更好(关于性能/速度和精度/最少损失)以及它们的不同之处是什么?

例:

double double1 = integer1 / (5 * integer2);
var double2 = integer1 / (5.0 * integer2);
var double3 = integer1 / (5D * integer2);
var double4 = (double) integer1 / (5 * integer2);
var double5 = integer1 / (double) (5 * integer2);
var double6 = integer1 / ((double) 5 * integer2);
var double7 = integer1 / (5 * (double) integer2);
var double8 = Convert.ToDouble(integer1 / (5 * integer2));
var double9 = integer1 / Convert.ToDouble(5 * integer2);
Run Code Online (Sandbox Code Playgroud)

实际上我的问题是关于转换而不是类型本身.

c# precision numeric type-conversion

8
推荐指数
1
解决办法
452
查看次数

与Mac和Linux上的exp函数略有不同

以下C程序在我的Mac和Linux上产生不同的结果.我很惊讶,因为我认为实施libm是以某种方式标准化的

#include<math.h>
#include<stdio.h>

int main()
{
  double x18=-6.899495205106946e+01;
  double x19 = exp(-x18);
  printf("x19     = %.15e\n", x19);
  printf("x19 hex = %llx\n", *((unsigned long long *)(&x19)));
}
Run Code Online (Sandbox Code Playgroud)

Mac上的输出是

x19     = 9.207186811339878e+29
x19 hex = 46273e0149095886
Run Code Online (Sandbox Code Playgroud)

在Linux上

x19     = 9.207186811339876e+29
x19 hex = 46273e0149095885
Run Code Online (Sandbox Code Playgroud)

两者都编译时没有任何优化标志,如下所示:

gcc -lm ....
Run Code Online (Sandbox Code Playgroud)

我知道我永远不应该比较漂浮物.

在调试期间出现了这个问题,遗憾的是使用这种计算证明的算法在数值上不稳定,这种微小的差异导致最终结果的显着偏差.但这是一个不同的问题.

令我感到惊讶的是,这些基本操作exp并未标准化,因为我可以期待IEEE 754规定的基本代数运算.

libm对于不同机器或不同版本的不同实现,是否有任何关于精度的假设?


由于下面的讨论我曾经mpmath计算过高于机器精度的值,我得到两个数字的结果9.2071868113398768244,所以对于我的两个结果,最后一个数字已经错了.linux上的结果可以通过向下舍入此值来解释,如果计算机使用四舍五入,则Mac结果也会关闭.

c linux precision macos numeric

8
推荐指数
1
解决办法
509
查看次数

线裁剪到任意2D多边形

如果我得到一个足够长的线段来穿过给定的多边形,这可能是凹多边形或凸多边形.我是如何找到多边形中包含的所有相交光段的?

替代文字

如果目标区域不是多边形,而是隐式曲线函数或样条曲线,该怎么做呢?

谢谢!

algorithm graphics geometry numeric

7
推荐指数
1
解决办法
3484
查看次数

PostgreSQL将尾随零添加到数字

最近我将数据库迁移到PostgreSQL,其中有一些列定义为numeric(9,3)numeric(9,4).在测试应用程序时,我发现当数据保存到这些列时,会在插入的值中添加尾随零.我正在使用Hibernate,我的日志显示为预准备语句构建的正确值.

我插入的数据示例在列中为0.75,numeric(9,3)存储的值为0.750.该numeric(9,4)列的另一个示例:我插入值12,DB保持12.0000.

我发现了这个相关的问题:postgresql数字类型没有尾随零.但它没有提供解决方案,除了引用9.x文档说没有添加尾随零.从这个问题,答案引用了文件(我也读过),其中说:

数字值是物理存储的,没有任何额外的前导或尾随零.因此,列的声明精度和比例是最大值,而不是固定分配.

但是,就像那个问题海报一样,我看到添加了尾随零.Hibernate在日志中生成的原始插入不会显示这个额外的行李.所以我假设它是一个我没有正确设置的PostgreSQL,我只是找不到我是怎么弄错的.

postgresql numeric padding

7
推荐指数
2
解决办法
3851
查看次数

DBL_MIN是最小的正双倍?

问: DBL_MIN是最小的正双倍?

下面的代码似乎没有提出这个问题.但如果这是真的,那么如何定义DBL_MIN以及它的用途或目的是什么.

平台:Windows7和Visual Studio 2013

double next_to_zero = std::nextafter(0.0,DBL_MIN);
bool b =  DBL_MIN <= next_to_zero;
std::cout << std::boolalpha 
          << "is dbl_min the smallest representable double? "
          << b << '\n';

std::cout << std::setprecision(56)
          << "dbl_min = " << DBL_MIN << '\n'
          << "next to zero = " << next_to_zero;
Run Code Online (Sandbox Code Playgroud)

输出:

dbl_min是最小的可表示的双倍?假

dbl_min = 2.2250738585072013830902327173324040642192159804623318306e-308

零旁边= 4.9406564584124654417656879286822137236505980261432476443e-324

c++ numeric language-lawyer

7
推荐指数
2
解决办法
5078
查看次数

检测某些非数字类型T的std :: numeric :: type <T>的特化

我想检查一个类型是否在std :: numeric_limits中有一个条目.当类型是数组 - (或者可能不是数字?)时,我得到编译器错误.这使我无法根据std :: numeric_limits中是否支持该类型来检测和分支.我很感激任何想要分享的见解.

// the following provokes compiler error on Clang
// Function cannot return array type 'type' (aka 'char [20]')
static_assert(
    ! std::numeric_limits<char[20]>::is_specialized,
    "! std::numeric_limits<char[20]>::is_specialized"
);
// invokes static assert on compile as expected
static_assert(
    std::numeric_limits<char[20]>::is_specialized,
    "std::numeric_limits<char[20]>::is_specialized"
);
Run Code Online (Sandbox Code Playgroud)

c++ limits numeric

7
推荐指数
1
解决办法
160
查看次数

如何在 Pytorch 中进行三次样条插值和积分

在Pytorch中,是否有类似于Scipy的三次样条插值?给定一维输入张量xy,我想对这些点进行插值并在 处求值xs以获得ys。另外,我想要一个积分器函数来查找,即从到 的Ys样条插值的积分。x[0]xs

python interpolation numeric pytorch

7
推荐指数
2
解决办法
4948
查看次数

对无限级数的有限前缀求和

该数字?可以通过以下无穷级数和来计算:

公式

我想定义一个 Haskell 函数roughlyPI,给定一个自然数k,计算从0k值的序列总和。

示例:(roughlyPi 1000或其他)=>3.1415926535897922

我所做的是(在 VS Code 中):

roughlyPI :: Double -> Double 
roughlyPI 0 = 2 
roughlyPI n = e1/e2 + (roughlyPI (n-1)) 
         where 
             e1 = 2**(n+1)*(factorial n)**2 
             e2 = factorial (2*n +1) 
             factorial 0 = 1 
             factorial n = n * factorial (n-1)
Run Code Online (Sandbox Code Playgroud)

但它并没有真正起作用......

*Main> roughlyPI 100 
NaN
Run Code Online (Sandbox Code Playgroud)

我不知道怎么了。顺便说一下,我是 Haskell 的新手。

我真正想要的是能够输入一个PI最后会给我的数字。不可能那么难...

precision haskell functional-programming numeric numerical-methods

7
推荐指数
2
解决办法
167
查看次数