在MATLAB中将双精度转换为单精度而不损失精度

0 投票
3 回答
7943 浏览
提问于 2025-04-16 08:55

我觉得这可能不太行,所以我决定在这里问问,因为我在网上搜索也没找到任何提示说我可以这样做。

特别是在看了这个之后:

双精度能否表示64位数字而不丢失精度

虽然我的数字可以用32位来表示,下面的例子就是这样。

但是在MATLAB里,有没有办法把双精度的值转换成单精度而不丢失信息呢?

比如在MATLAB中:

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

或者在其他语言中,比如Python,有没有其他方法呢?

我在使用GPUMat,而我只能用GPUSingle,所以我想找个办法把MATLAB中的双精度数据转换成单精度,以便在GPU上使用。

谢谢,

3 个回答

0

如果你只关心整数的话,可以使用int32来代替。

2

当你在进行这些实验时,记得要打开

format long

这样你就能看到更多的小数值了。例如,

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

一个单精度数可以存储的整数最大是2的24次方(也就是16,777,216),而且不会出现精度丢失——因为有一些位数是用来表示符号和指数的。

换句话说,你不能把大于2的24次方的数字放进单精度数里而不出错(不过要注意,如果这个大数字可以表示成一个小于2的24次方的数字乘以2的某个次方,那它是可以存进去的)。

不过,你真的需要这么高的精度来进行计算吗?只要你的所有整数都小于2的24次方,那你就没问题了。

撰写回答