问题标签 [double-precision]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 双精度 - MS Visual C++ 2005 与 Matlab
我正在使用 MS Visual C++ 2005 在 C++ 中实现一些数学算法。我的 C++ 代码采用在 Matlab 中生成的 12 位小数精度的 10K 双精度数据类型输入值(例如 866.333333333333)。然后我的代码进行一些计算并给出结果,即机械实体的损坏值,当相同的算法以相同的输入值在其中运行时,它应该与 matlab 输出相同。
我的问题是 matlab 提供 10k 输入值,精度为小数点后 12 位,但我的 c++ 代码使它们精确到小数点后 15 位。这意味着来自 matlab 的 866.333333333333 将在 C++ 中用作 866.33333333333303。我知道这就是 IEEE754 浮点表示。但是,当我将 C++ 输出与 matlab 输出进行比较时,输入的这个非常微小的变化确实会对最终结果产生可衡量的差异。我可能听起来很奇怪,但这可能是观察到的。我希望我可以在这里分享一些代码,但它是非常机密的。如果有人帮助我解决这个问题,我将不胜感激。
提前致谢...!
mysql - 为什么 MySQL 不能得到正确的数据?
我正在使用 CodeIgniter 的 Active Record,我的代码是:
当我var_dump
得到$campaign_ledger
:
但是当数据进入我的数据库时,这balance
是91.36800000000001
出于某种原因。那么断开连接是怎么回事呢?
编辑
更改为 后DECIMAL(10,4)
,我仍然得到91.3680
输出。
c++ - c ++ String在打印时缩短了两倍
这个字符串操作以简写形式打印出一个 double,我不知道为什么。为什么会发生这种情况,我怎样才能获得像第一行输出一样的完整输出?
opencl - Radeon HD 4850 和 OpenCL:cl_khr_fp64 可以在这个显卡上工作吗?
根据 AMD兼容性表,此视频卡 (Radeon HD 4850) 仅符合 OpenCL 1.0 。我需要一些硬件来使用doubleN 类型进行密集的财务计算(根本没有浮点数!)。根据这张卡片表,这张卡片可以使用双重类型。现在我有可能以极具吸引力的价格购买它。
如果回答者在使用带有fp64扩展的 OpenCL 卡方面有真正的经验,我将不胜感激。当然,如果这张卡有问题,请在这里放两行。
谢谢你,对不起我的英语。
algorithm - 大整数的 GCD 算法
我正在寻找有关快速 GCD 计算算法的信息。特别是,我想看看它的实现。
对我来说最有趣的是: - Lehmer GCD 算法, - 加速 GCD 算法, - k-ary 算法, - 带有 FFT 的 Knuth-Schonhage。我完全没有关于加速 GCD 算法的信息,我只看过几篇文章,其中提到它是在中等输入(~1000 位)上最有效和最快速的 gcd 计算方法
从理论的角度来看,它们看起来对我来说很难理解。任何人都可以分享代码(最好在 c++ 上)实现列表中的任何算法\部分或分享任何这样做的经验。我也将不胜感激任何信息、评论、建议和地方调查。我有一个处理大整数的类,但我没有处理它的方法。当然,除了 Euclid 和 Binary gcd 算法,我现在看起来很清楚;没有问题。最后我想得到的主要内容:实现 lehmer gcd 的代码。(从列表中更容易)
java - java:如何将双精度数字转换为十进制
我想将双精度数字转换为十进制。
例如,我有 23.43,双精度值将是(使用 matlab):174 71 255 122 20 110 55 64 现在有了这个,我该如何编写一个给我 23.43 的 java 程序?
这是matlab中双精度的计算:
MATLAB 根据 IEEE 标准 754 为双精度构造双精度数据类型。任何存储为双精度值的值都需要 64 位,格式如下表所示:
位使用
63 符号(0 = 正,1 = 负)
62 到 52 指数,偏差 1023
51 到 0 数字 1.f 的分数 f
java - 试图将双精度数转换为十进制
我正在尝试将双精度数转换为十进制。例如,双精度数字 22 和字节为:
现在我尝试再次将这些值转换为 22 :
但结果是完全错误4.6688606E18
的:这个数字是多少?请帮忙,我完全糊涂了!
根据 IEEE 标准 754 双精度:
任何存储为双精度值的值都需要 64 位,格式如下表所示:
63 符号(0 = 正,1 = 负)
62 到 52 指数,偏差 1023
51 到 0 数字 1.f 的分数 f
现在我应该如何将双精度转换为数字以再次获得 22?所有这些答案都是错误的
c - 在 C 中以更高的精度存储数字
我正在编写一个程序,我需要以非常高的精度(大约10^-10
)存储数字,然后进一步使用它们作为参数(create_bloomfilter ([yet to decide the type] falsePositivity, long expected_num_of_elem)
)。
我能得到的最高精度是double
(周围的东西10^-6
),这还不够。
我们如何在 c 中以更高的精度存储数字?
java - Double.parseDouble() 和 String.valueOf() 的精度
以下语句是否适用于任何double
(Java 原始双精度 IEEE-754),除了NaN
:
否则,解析序列化的(使用 String.valueOf())双精度值是否总是产生精确的原始双精度值?
cuda - CURAND_STATUS_DOUBLE_PRECISION_REQUIRED 未定义
在构建我的 CUDA 项目时,我收到以下错误:
cutil_inline_runtime.h(328): error: identifier "CURAND_STATUS_DOUBLE_PRECISION_REQUIRED" is undefined
所以我开始用谷歌搜索。由于我找不到解决方案(也没有找到实际问题),我从 nVIDIA CURAND 指南 pdf 下载并开始阅读。在那个pdf中它说:
这意味着我不能执行双重数据类型的操作......对吗?好吧,这似乎是错误的,因为我向你保证,几天前我使用双数据类型制作了一个项目,它工作得很好。有人有建议吗?谢谢!
编辑由于我无法找到问题的“真正”解决方案,最终我在 cutil_inline_runtime.h 中用“CURAND_STATUS_DOUBLE_PRECISION_REQUIRED”注释掉了这些行,现在它可以工作了。我知道这很“丑陋”,但这是唯一有帮助的...