我使用Azavea Numeric Scala库进行通用数学运算.但是,我不能将它们与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) 所以我喜欢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方法?
谢谢!
我想知道哪种转换对于简单的数学运算更好(关于性能/速度和精度/最少损失)以及它们的不同之处是什么?
例:
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程序在我的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结果也会关闭.
如果我得到一个足够长的线段来穿过给定的多边形,这可能是凹多边形或凸多边形.我是如何找到多边形中包含的所有相交光段的?

如果目标区域不是多边形,而是隐式曲线函数或样条曲线,该怎么做呢?
谢谢!
最近我将数据库迁移到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,我只是找不到我是怎么弄错的.
问: 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
我想检查一个类型是否在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) 在Pytorch中,是否有类似于Scipy的三次样条插值?给定一维输入张量x和y,我想对这些点进行插值并在 处求值xs以获得ys。另外,我想要一个积分器函数来查找,即从到 的Ys样条插值的积分。x[0]xs
该数字?可以通过以下无穷级数和来计算:
我想定义一个 Haskell 函数roughlyPI,给定一个自然数k,计算从0到k值的序列总和。
示例:(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