标签: double-precision

MATLAB:将uint32(4字节)值转换为相应的IEEE单精度浮点形式

在MATLAB(r2009b)中,我有一个包含值2147484101的uint32变量.

这个数字(4字节)是在抓取过程中从数字机器视觉相机中提取的.根据我的理解,它具有相机快门速度的单精度形式(应接近1/260s = 3.8ms).

如何使用MATLAB中提供的内容将此32位数转换为IEEE单精度浮点表示?

对于变量n中提到的值,我尝试使用nn = dec2hex(n,16)hex2num(nn)的组合.但似乎hex2num期望十六进制编码是双精度的而不是单一的,因为它在这里.至少我用这种方法得到了奇怪的数字.

有任何想法吗?

编辑:尝试@Matt的答案如下:

typecast(uint32(2147484101),'single') %# without swapbytes
typecast(swapbytes(uint32(2147484101)),'single') %# with swapbytes
Run Code Online (Sandbox Code Playgroud)

这使:

ans =

  -6.3478820e-043

ans =

  -2.0640313e+003
Run Code Online (Sandbox Code Playgroud)

我在http://www.h-schmidt.net/FloatApplet/IEEE754.html上尝试了IEEE 754转换器(JAVA applet).

使用:

format hex
typecast(uint32(2147484101),'uint8') %# without swapbytes
typecast(swapbytes(uint32(2147484101)),'uint8') %# with swapbytes
Run Code Online (Sandbox Code Playgroud)

ans =

   c5   01   00   80

ans =

   80   00   01   c5
Run Code Online (Sandbox Code Playgroud)

将这些字节输入applet(十六进制)给出了与MATLAB相同的数字.

floating-point binary matlab double-precision ieee-754

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

在 C 中以更高的精度存储数字

我正在编写一个程序,其中我需要以非常高的精度(大约10^-10)存储数字,然后进一步使用它们作为参数(create_bloomfilter ([yet to decide the type] falsePositivity, long expected_num_of_elem))。
我能够获得的最高精度是double(周围的东西10^-6)这还不够。

我们如何在 c 中以更高的精度存储数字?

c precision math.h double-precision

4
推荐指数
1
解决办法
5056
查看次数

如何在MacOSX上设置C++的双精度?

我正在尝试移植_controlfp(_CW_DEFAULT,0xffffffff); 从WIN32到Mac OS X/Intel.我完全不知道如何移植这条指令......你呢?谢谢!

c++ macos fpu double-precision

3
推荐指数
1
解决办法
734
查看次数

C++:0和0.0之间的差异?

我很清楚00.0(int和double)之间的区别.

但是0.和之间有什么区别0.0(请注意.)?

非常感谢提前,

阿克塞尔

c c++ grammar double-precision

3
推荐指数
1
解决办法
2596
查看次数

C++写入和读取从二进制文件加倍

我想为占用太多RAM的程序执行磁盘I/O操作.我使用双精度矩阵并考虑将它们写入磁盘,因为字节是最快的方式(我需要保持双精度).

如何做到便携?

我发现这个代码(这里),但作者说它不便携......

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ofstream ofs( "atest.txt", ios::binary );

    if ( ofs ) {
        double pi = 3.14;

        ofs.write( reinterpret_cast<char*>( &pi ), sizeof pi );
        // Close the file to unlock it
        ofs.close();

        // Use a new object so we don't have to worry
        // about error states in the old object
        ifstream ifs( "atest.txt", ios::binary );
        double read;

        if ( ifs ) {
            ifs.read( reinterpret_cast<char*>( &read ), sizeof …
Run Code Online (Sandbox Code Playgroud)

c++ io portability binaryfiles double-precision

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

用于大整数的GCD算法

我在寻找有关快速GCD计算算法的信息.特别是,我想看看它的实现.

对我来说最有趣的是: - Lehmer GCD算法, - 加速GCD算法, - k-ary算法, - 带有FFT的Knuth-Schonhage.我完全没有关于加速GCD算法的信息,我刚看到一些文章,其中提到它是中等输入(~1000位)上最有效和最快速的gcd计算方法

从理论上看,我们很难理解它们.任何人都可以分享代码(最好是在c ++上)与列表中任何算法\部分的实现或分享任何经验.我将非常感谢任何信息,评论,建议,地方.我有一个使用大整数的类,但我没有方法可以使用它.当然,除了欧几里德和二进制gcd算法,我现在看起来很清楚; 这没有问题.我想在最后得到的主要内容:实现lehmer gcd的代码.(从列表中更容易)

algorithm complexity-theory computation double-precision greatest-common-divisor

3
推荐指数
1
解决办法
3397
查看次数

C中双数据类型的最大精度是多少?

为了比较C中的两个双重类型变量,我已经定义了#define EQUALITY_EPSILON = 1e-8.我正在进行如下比较:

if((img_score[i] - img_score[j]) >= EQUALITY_EPSILON){
    // handle for ith score greater than jth score
}
else if((img_score[j] - img_score[i]) >= EQUALITY_EPSILON){
    // handle for ith score smaller than jth score
}
else{
    // handle for ith score equal to jth score
}
Run Code Online (Sandbox Code Playgroud)

我面临的问题是我的代码中的分数非常小,因此EQUALITY_EPSILON = 1e-8,在某些情况下,比较的结果证明是相等的.我的问题是我可以设置多小EQUALITY_EPSILON

c floating-point double-precision

3
推荐指数
1
解决办法
2014
查看次数

在编译时在float和double精度之间切换

如果我想在编译时在float和double精度之间切换,我应该在哪里看看.就像,如果用户想要浮动而不是双精度,我怎么能保持这种灵活性呢?换句话说,我应该如何有条件地定义一个可以是float或double精度的变量?

c++ double-precision floating-point-precision

3
推荐指数
1
解决办法
2746
查看次数

string.format(format,doubleValue),精度丢失

我有这个double价值:

var value = 52.30298270000003
Run Code Online (Sandbox Code Playgroud)

当我把它转换成它时string,它失去了它的精度:

var str = string.Format("{0} some text...", value);
Console.WriteLine(str); // output: 52.3029827
Run Code Online (Sandbox Code Playgroud)

我的值的精度double可能会在运行时更改.如何强制该string.Format方法使用所有精度

c# double string.format double-precision

3
推荐指数
1
解决办法
1067
查看次数

函数返回类型不匹配

我正在尝试用 Fortran 重新编码旧的 C++ 程序以使用 LAPACK(我知道 C++ 确实有 LAPACK++,但我在安装它时遇到了很多麻烦,所以我放弃了)。

我最初没有任何编译问题,但那是当我将所有变量声明为REAL. 当我开始编写需要 LAPACK 的程序部分时,我发现传递给的所有参数都DSYEV需要是DOUBLE PRECISION. 因此,我尝试将所有内容更改为双精度(包括将所有硬编码数字更改为双精度对应数字,即 0.0 -> 0.0D0) 现在,当我尝试编译时,我得到的所有函数和子例程均出现以下错误已经写道:

    Error: Return type mismatch of function <function> at (1) (REAL(4)/REAL(8))
Run Code Online (Sandbox Code Playgroud)

我不确定这是从哪里来的,因为程序中的所有内容都已更改为双精度。

例如,我声明了以下内容:

double precision :: alpha(3),d(3),zeta1,zeta2
double precision :: A1(3),A2(3),D1(3),D2(3)
double precision :: PI
PI = 3.14159265359D0
alpha = (/0.109818D0, 0.405771D0, 2.22766D0/)
d = (/0.444635D0, 0.535328D0, 0.154329D0 /)

do 10 i=1,3

A1(i) = alpha(i)*zeta1**2.0D0
A2(i) = alpha(i)*zeta2**2.0D0
D1(i) = d(i)*(2.0D0*A1(i)/PI)**(3.0D0/4.0D0)
D2(i) = d(i)*(2.0D0*A2(i)/PI)**(3.0D0/4.0D0)

10  continue …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran double-precision lapack

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