标签: floating-point-precision

是否可以在GHC/Haskell中使用扩展精度(80位)浮点运算?

标准Haskell的Double使用标准的双精度算法:

data Double 双精度浮点数.希望这种类型在范围和精度上至少与IEEE双精度类型相同.

GHC/Haskell是否也提供扩展精度(80位)浮点数,也许使用一些外部库?

floating-point haskell ghc floating-point-precision extended-precision

15
推荐指数
1
解决办法
2268
查看次数

在不同的平台上使用Numpy

我有一段代码来计算Helmholtz-Hodge分解.我一直在我的Mac OS Yosemite上运行,它运行得很好.然而,一个月前,我的Mac变得非常慢(它真的很旧),我选择购买新的笔记本电脑(Windows 8.1,戴尔).

在安装了所有Python库等之后,我继续我的工作运行相同的代码(在Git中版本化).然后结果非常奇怪,与旧笔记本中获得的结果完全不同.

例如,我所做的是构造矩阵ab(非常长的微积分)然后我称之为求解器:

s = numpy.linalg.solve(a, b)
Run Code Online (Sandbox Code Playgroud)

这是返回a(错误,并且在我的Mac中获得的结果不同,这是正确的).

然后,我尝试使用:

s = scipy.linalg.solve(a, b)
Run Code Online (Sandbox Code Playgroud)

程序以代码0退出,但在其中间.然后,我做了一个简单的测试:

print 'here1'
s = scipy.linalg.solve(a, b)
print 'here2'
Run Code Online (Sandbox Code Playgroud)

并且here2从未打印过.

我试过了:

print 'here1'
x, info = numpy.linalg.cg(a, b)
print 'here2'
Run Code Online (Sandbox Code Playgroud)

同样的事情发生了.

使用后我也尝试检查解决方案numpy.linalg.solve:

print numpy.allclose(numpy.dot(a, s), b)
Run Code Online (Sandbox Code Playgroud)

我有一个False(?!).

我不知道发生了什么,如何找到解决方案,我只知道在我的Mac上运行相同的代码,但如果我可以在其他平台上运行它会非常好.现在我陷入了这个问题(不再使用Mac)并且没有任何关于原因的线索.

最奇怪的是,我没有收到运行时警告的任何错误,根本没有反馈.

感谢您的任何帮助.

编辑:

Numpy Suit测试结果:

在此输入图像描述

Scipy Suit测试结果:

在此输入图像描述

python windows macos numpy floating-point-precision

15
推荐指数
1
解决办法
1270
查看次数

为什么MySQL循环浮动的方式比预期的要多?

UPDATE some_table SET some_float_field=1919.987 WHERE id=123

SELECT * FROM some_table WHERE id=123
Run Code Online (Sandbox Code Playgroud)

其中some_float_field是一个定义为"float"的字段(没有任何特定的大小值).

预期结果值为1919.987; 相反,它被舍入到1919.99

为什么?32位(单精度)浮子具有足够的精度,可以正确存储!

mysql floating-point-precision

12
推荐指数
2
解决办法
1万
查看次数

如何从变量中指定浮点小数精度?

我有以下重复的简单代码重复几次,我想为一个函数:

for i in range(10):
    id  = "some id string looked up in dict"
    val = 63.4568900932840928 # some floating point number in dict corresponding to "id"
    tabStr += '%-15s = %6.1f\n' % (id,val)
Run Code Online (Sandbox Code Playgroud)

我希望能够调用此函数:def printStr(precision)
凡瓶坯上面的代码,并返回tabStrvalprecision小数点.

例如:printStr(3)
将返回63.457valtabStr.

任何想法如何实现这种功能?

python string floating-point floating-point-precision

11
推荐指数
2
解决办法
1万
查看次数

C++处理过多的精度

我目前正在研究进行多精度浮点运算的代码.为了正常工作,该代码要求在明确定义的点处将值降低到最终精度.因此,即使将中间结果计算到80位扩展精度浮点寄存器,在某些时候也必须将其四舍五入为后续操作的64位双精度.

代码使用宏INEXACT来描述此要求,但没有完美的定义.在GCC手册中提到-fexcess-precision=standard的办法迫使流延和赋值操作定义良好的精度.但是,它还写道:

对于C以外的语言,未实现"-fexcess-precision = standard"

现在我正在考虑将这些想法移植到C++(如果有人知道现有的实现,则欢迎评论).所以我似乎无法将该开关用于C++.但是没有任何开关的g ++默认行为是什么?是否有更多类似C++的方法来控制过度精度的处理?

我想对于我目前的用例,我可能会-mfpmath=sse在任何情况下使用,据我所知,这不应该产生任何过多的精度.但我仍然很好奇.

c++ floating-point gcc floating-point-precision extended-precision

11
推荐指数
1
解决办法
1484
查看次数

max_digits10的目的是什么?它与digits10的不同之处是什么?

我对什么max_digits10代表感到困惑.根据其文档,对于所有整数类型,它为0.浮点类型的公式max_digits10看起来类似于int's digits10'.

c++ precision numeric-limits floating-point-precision c++11

11
推荐指数
2
解决办法
2404
查看次数

10
推荐指数
2
解决办法
6万
查看次数

/ fp:strict和/ fp之间的区别:精确?

你什么时候使用fp:strict而不是fp:exact?如果我想要"更精确"的计算并避免舍入错误,使用前者会更好吗?什么是使用后者的启发式?

c++ floating-point visual-studio-2010 visual-c++ floating-point-precision

10
推荐指数
1
解决办法
3586
查看次数

处理mysqli中的十进制数

我必须将一些项目的价格放在mysql表中.在创建我正在使用的表时,DECIMAL(10,2)因为我在逗号后不需要超过2位数(例如:123,45将被接受作为输入,但123,456将被舍入为123,45与PHP).

第一个问题:使用DECIMAL(10,2),如何知道逗号之前可以存储多少个数字?我知道它不是10,因为10只是Mysql在使用这些数字进行数学运算时所使用的精度:那么数字本身的长度是指定的吗?

第二个问题:我使用PHP来舍入用户输入以适应数据类型(逗号后面带有2个数字的浮点数).我该如何使用它mysqli->bind_param来插入这些数据?我应该使用哪些数据类型(来自文档)bind_param(可能:为什么)?

Character   Description
i   corresponding variable has type integer
d   corresponding variable has type double
s   corresponding variable has type string
b   corresponding variable is a blob and will be sent in packets
Run Code Online (Sandbox Code Playgroud)

php floating-point mysqli floating-accuracy floating-point-precision

10
推荐指数
1
解决办法
1万
查看次数

解决浮点舍入问题C++

我开发了一种科学应用(模拟在细胞核中移动的染色体).将染色体分成小片段,使用4x4旋转矩阵围绕随机轴旋转.

问题是模拟执行数千亿次旋转,因此浮点舍入误差会呈指数级增长并逐渐增长,因此随着时间的推移,碎片会"漂浮"并与染色体的其余部分分离.

我在C++中使用双精度.软件暂时在CPU上运行,但将移植到CUDA,模拟最多可持续1个月.

我不知道我怎么能以某种方式重新规范化染色体,因为所有的片段都被链接在一起(你可以把它看成是一个双重链接列表),但我认为如果可能的话,这将是最好的想法.

你有什么建议吗 ?我觉得有点迷茫.

非常感谢你,

H.

编辑:添加了简化的示例代码.您可以假设所有矩阵数学都是经典实现.

// Rotate 1000000 times
for (int i = 0; i < 1000000; ++i)
{
    // Pick a random section start
    int istart = rand() % chromosome->length;

    // Pick the end 20 segments further (cyclic)
    int iend = (istart + 20) % chromosome->length;

    // Build rotation axis
    Vector4 axis = chromosome->segments[istart].position - chromosome->segments[iend].position;
    axis.normalize();

    // Build rotation matrix and translation vector
    Matrix4 rotm(axis, rand() / float(RAND_MAX));
    Vector4 oldpos = chromosome->segments[istart].position; …
Run Code Online (Sandbox Code Playgroud)

c++ scientific-computing matrix-multiplication floating-point-precision

9
推荐指数
1
解决办法
1856
查看次数