题
有没有哪里会令使用一个单一的数据类型,而不是双重的更有意义的任何情况呢?从我的搜索,缺点为双是它需要更多的空间,这不是大多数应用程序的问题。在这种情况下,都应该浮点数是双打?
一点背景信息: 我与同很多关于坐标和化学品的数据涉及的应用程序的工作。几个客户已经注意到,导入数据的电子表格时,具有精度高一些的值向下舍入一个单一的精度。
解决方案
在大多数桌面应用程序,是的。
不过,如果你有一个庞大其中阵列,减半如果你不需要精密的的大小可能足以显著是值得的。
特别是考虑到几乎所有家用台式机具有双精度浮点运算硬件完成。
其他提示
从此 .NET文章
数据类型宽度
在最有效的数据类型是 那些使用本地数据宽度 的运行时间平台。在当前 平台上,数据宽度为32位, 计算机和两个 操作系统。
因此,整数是目前 在Visual最有效的数据类型 Basic .NET中。接下来最好是长,短, 和字节,在效率的顺序。 您可以提高性能 短和字节通过关闭整 溢出检查,例如,通过 设置RemoveIntegerChecks 属性,但是这会带来风险 计算不正确,由于 未被发现溢出。你不能 打开和关闭期间,这个检查 运行;你只能将其值设置 对于未来建设的 应用
如果您需要分数值,所述 最好的选择是双重的,因为 当前的浮点处理器 平台执行所有操作 双精度。接下来最好是单 和小数,在顺序 效率
正如马克在他的评论中说,空间可以在内存受限的系统中的一个问题。您可能还需要索引或排序列表,以及为什么这样做对双打,如果你可以存储在单打你的价值观?
在一些硬件,算术涉及双值可能需要比,涉及单值更长的时间,但最近的FPU具有单个本地数据类型(例如,80位扩展浮点用于x86点值),这将在内部为计算中使用无论使用什么内存中的数据类型所使用。所以这是说,“FPU计算将与单精度更快”一般的不可以的理由上最现代化的硬件上使用单精度今天。
这就是说,除了“使用较少的内存”的原因在其他的答案阐述,还有,当涉及到像SSE和的AltiVec SIMD向量指令一个非常实际的原因 - 单精度是LIKEY要快两倍作为双精度,由于指令在固定大小的矢量操作,并且可以东西两倍多单精度值到单一载体中,与处理时间通常保持相同。
例如,具有能够在2个时钟周期的处理矢量乘法128位向量单元,可以得到一个通过每时钟2次单精度乘法,对1级精度,因为你可以4个单打在载体中,与两个双打。
一个类似的效果与存储器带宽发生,并且不是特定于载体处理 - 如果你有双打的大阵列,它们不仅会两倍的空间,但可能需要多达两倍的时间的情况下处理该您的算法带宽约束(其被越来越有可能给定的矢量处理单元中的增加的尺寸和减小的等待时间)。
双打会占用更多空间,但额外的精度可以是或可以不是必需的。我已经在科学世界里,浮点运算是很常见的,并已发现,往往你能在双精度或更高的计算,但结果作为选拔存储没有不良影响做了很多节目。
记请一旦数字被吸入FPU,他们扩大了精度非常高的反正。话虽这么说,这将是最好的尝试无论你是在这两个精度做,看看结果是可比的。
不幸的是,计算仍然是一个实验科学
如果您编码的OpenGL那么它的正常使用GLSingle(如单),而不是GLDouble。在几乎所有情况下,单精度是大多数图形应用绰绰有余,应该是更快的 - 尽管我承认我不能确定这最新一代的GPU。
我对这个问题最喜欢引用的是单精度足以导航到地球与月球之间,所以在实践中是不寻常造成一个真正的问题。在大多数情况下,这就是说我会达到双时下作为存储很便宜,有不太可能是任何奇怪的二进制到十进制的问题。