在MATLAB中将Double转换为Single而不会损失精度

时间:2010-12-22 20:19:27

标签: python matlab cuda double

我不认为这是可能的,因此我决定在这里要求看到谷歌搜索没有返回任何暗示我可以这样做的结果。

特别是在看完之后:

Can doubles be used to represent a 64 bit number without loss of precision

虽然我的数字可以保持在32位,如下例所示。

但MATLAB中有没有办法将双精度值转换为单精度而不丢失信息?

e.g。在MATLAB中

> a = 103364148
a =
   103364148
> single(a)
ans =
   103364144

也许还有另一种语言,例如蟒?

我正在使用GPUMat,我只能使用GPUSingle,因此我正在尝试找到一种方法来处理MATLAB单一到GPU的双重内容。

谢谢,

3 个答案:

答案 0 :(得分:4)

单个数据可以保存整数到2 ^ 24(16,777,216)而不会丢失精度 - 符号和指数需要一些位。

换句话说,不,你没有办法让一个大于2 ^ 24的数字适合一个没有错误(注意它可以容纳一些更大的数字,只要它们可以写成产品一个小的数字2 ^ 24和一些2的幂。

但是,您确定在计算时需要那种精度吗?只要你的整数都小于2 ^ 24,你应该没问题。

答案 1 :(得分:2)

当你进行这些实验时,你应该打开

format long

所以你可以看到更多的十进制值。例如,

>> pi     
ans =
    3.1416
>> format long
>> ans
ans =
   3.141592653589793

答案 2 :(得分:0)

如果您唯一关注的是整数,则可以使用int32