首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >浮点vs双倍性能

浮点vs双倍性能
EN

Stack Overflow用户
提问于 2009-01-06 18:09:06
回答 4查看 75.3K关注 0票数 94

我做了一些计时测试,也读了一些像this one (上一条评论)这样的文章,看起来在发布版本中,浮点值和双精度值占用了相同的处理时间。

这怎麽可能?当浮点数与双精度值相比精度较低且较小时,CLR如何在相同的处理时间内获得双精度值?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-01-06 18:15:38

至少在x86处理器上,floatdouble将各自转换为10字节的实数进行处理。对于它支持的不同浮点类型,FPU没有单独的处理单元。

100年前,当大多数FPU都没有内置的FPU(而且很少人有单独的float芯片)时,人们一直认为double比FPU更快,所以大多数浮点操作都是在软件中完成的。在这些机器上(由熔岩坑产生的蒸汽提供动力),使用floats的速度更快。现在floats唯一的真正好处是它们占用的空间更少(只有当你有数百万个这样的机器时,这才是重要的)。

票数 159
EN

Stack Overflow用户

发布于 2012-07-13 17:37:13

它依赖于32位64位系统。如果编译到64位,double会更快。在64位(机器和操作系统)上编译为32位使float的速度提高了约30%:

代码语言:javascript
复制
    public static void doubleTest(int loop)
    {
        Console.Write("double: ");
        for (int i = 0; i < loop; i++)
        {
            double a = 1000, b = 45, c = 12000, d = 2, e = 7, f = 1024;
            a = Math.Sin(a);
            b = Math.Asin(b);
            c = Math.Sqrt(c);
            d = d + d - d + d;
            e = e * e + e * e;
            f = f / f / f / f / f;
        }
    }

    public static void floatTest(int loop)
    {
        Console.Write("float: ");
        for (int i = 0; i < loop; i++)
        {
            float a = 1000, b = 45, c = 12000, d = 2, e = 7, f = 1024;
            a = (float) Math.Sin(a);
            b = (float) Math.Asin(b);
            c = (float) Math.Sqrt(c);
            d = d + d - d + d;
            e = e * e + e * e;
            f = f / f / f / f / f;
        }
    }

    static void Main(string[] args)
    {
        DateTime time = DateTime.Now;
        doubleTest(5 * 1000000);
        Console.WriteLine("milliseconds: " + (DateTime.Now - time).TotalMilliseconds);

        time = DateTime.Now;
        floatTest(5 * 1000000);
        Console.WriteLine("milliseconds: " + (DateTime.Now - time).TotalMilliseconds);

        Thread.Sleep(5000);
    }
票数 13
EN

Stack Overflow用户

发布于 2010-07-06 07:24:17

我有一个小项目,在那里我使用了CUDA,我记得float也比那里快了一倍。这一次,主机和设备之间的流量较低(主机是CPU和“正常”RAM,设备是GPU和相应的RAM )。但是,即使数据一直驻留在设备上,它也会变得更慢。我想我在某处读到,这最近已经改变了,或者应该随着下一代的改变而改变,但我不确定。

因此,在这些情况下,图形处理器似乎根本无法处理双精度,这也解释了为什么通常使用GLFloat而不是GLDouble。

(正如我所说的,就我记忆所及,我是在CPU上搜索float和double时偶然发现的。)

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/417568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档