在MATLAB中将双精度转换为单精度而不损失精度
我觉得这可能不太行,所以我决定在这里问问,因为我在网上搜索也没找到任何提示说我可以这样做。
特别是在看了这个之后:
虽然我的数字可以用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次方,那你就没问题了。