相关疑难解决方法(0)

Math.Pow()是如何在.NET Framework中实现的?

我一直在寻找用于计算的有效方法b(说a = 2b = 50).为了开始,我决定看一下Math.Pow()函数的实现.但在.NET Reflector中,我发现的只有:

[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
public static extern double Pow(double x, double y);
Run Code Online (Sandbox Code Playgroud)

当我调用Math.Pow()函数时,我可以看到内部发生了什么的一些资源?

.net c# pow

427
推荐指数
3
解决办法
4万
查看次数

.NET CLR是否真的针对当前处理器进行了优化

当我读到有关C#或Java等JITted语言的性能时,作者通常会说它们理论上应该/可以胜过许多本机编译的应用程序.理论上,本机应用程序通常只是为处理器系列(如x86)编译,因此编译器无法进行某些优化,因为它们可能并非真正在所有处理器上进行优化.另一方面,CLR可以在JIT过程中进行特定于处理器的优化.

有谁知道微软(或Mono)的CLR在JIT过程中是否实际执行特定于处理器的优化?如果是这样,有什么样的优化?

.net c# clr optimization jit

44
推荐指数
2
解决办法
2988
查看次数

是否可以滚动明显更快的sqrt版本

在我正在分析的应用程序中,我发现在某些情况下,此功能可以占用总执行时间的10%.

我已经看到多年来使用偷偷摸摸的浮点技巧进行了更快的sqrt实现的讨论,但我不知道现代CPU上是否有这样的东西已经过时了.

正在使用MSVC++ 2008编译器,以供参考......虽然我认为sqrt不会增加太多开销.

有关modf函数的类似讨论,另请参见此处.

编辑:作为参考,是一种广泛使用的方法,但它实际上更快?这些天SQRT有多少个周期?

c++ optimization sqrt

26
推荐指数
3
解决办法
3万
查看次数

为什么微软放弃了长双数据类型?

不久前我写了一个程序,它使用了一些阶乘函数.我使用long double数据类型来支持"相对"大数字.

现在,我从代码块改为Visualstudio 2010,我想知道为什么我的程序不再工作,直到我在一些研究中意识到MS已经放弃了长双数据类型.这有什么特别的原因吗?对我而言,它看起来非常像技术方面的倒退.

有没有其他选择?(我也很乐意使用boost库中的替代品).

c++ floating-point long-double visual-studio

21
推荐指数
1
解决办法
7695
查看次数

c#Math.Sqrt实现

我最近一直在使用System.Math,有一天我想知道微软将如何在库中实现Sqrt方法.所以我弹出了我最好的伙伴Reflector并尝试反汇编库中的方法,但它显示:

[MethodImpl(MethodImplOptions.InternalCall),ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
public static extern double Sqrt(double d);
Run Code Online (Sandbox Code Playgroud)

那天有史以来第一次,我意识到我的孩子依赖于框架,吃饭.

开玩笑,但我想知道MS会用什么样的算法来实现这个方法,换句话说,如果你没有库支持,你将如何用C#编写自己的Math.Sqrt实现.

干杯

.net c# math frameworks

10
推荐指数
1
解决办法
8690
查看次数

c#到c ++字典到unordered_map结果

我现在已经做了几年c#,我正在尝试学习一些新东西.所以我决定看看c ++,以不同的方式了解编程.

我一直在做大量阅读,但我今天刚开始写一些代码.

在运行VS2010的Windows 7/64位机器上,我创建了两个项目:1)一个c#项目,让我按照我习惯的方式编写东西.2)一个c ++"makefile"项目,让我玩,试图实现相同的东西.据我所知,这不是一个.NET项目.

我试图填充一个10K值的字典.出于某种原因,c ++慢了几个数量级.

这是下面的c#.注意我在时间测量之后放入一个函数,以确保编译器没有"优化"它:

var freq = System.Diagnostics.Stopwatch.Frequency;

int i;
Dictionary<int, int> dict = new Dictionary<int, int>();
var clock = System.Diagnostics.Stopwatch.StartNew();

for (i = 0; i < 10000; i++)
     dict[i] = i;
clock.Stop();

Console.WriteLine(clock.ElapsedTicks / (decimal)freq * 1000M);
Console.WriteLine(dict.Average(x=>x.Value));
Console.ReadKey(); //Don't want results to vanish off screen
Run Code Online (Sandbox Code Playgroud)

这是c ++,没有太多的想法进入它(试图学习,对吗?)int输入;

LARGE_INTEGER frequency;        // ticks per second
LARGE_INTEGER t1, t2;           // ticks
double elapsedTime;

// get ticks per second
QueryPerformanceFrequency(&frequency);

int i;
boost::unordered_map<int, int> dict; …
Run Code Online (Sandbox Code Playgroud)

c# c++ collections performance visual-studio

10
推荐指数
1
解决办法
4977
查看次数

c ++和c#速度比较

当你处理繁重的计算时,当你需要使用原始CPU功率时,我担心C#的速度.

在计算方面,我一直认为C++比C#快得多.所以我做了一些快速测试.第一个测试计算素数<整数n,第二个测试计算一些pandigital数字.第二次测试的想法来自于:Pandigital Numbers

C#素数计算:

using System;
using System.Diagnostics;

class Program
{

    static int primes(int n)
    {

        uint i, j;
        int countprimes = 0;

        for (i = 1; i <= n; i++)
        {
            bool isprime = true;

            for (j = 2; j <= Math.Sqrt(i); j++)

                if ((i % j) == 0)
                {
                    isprime = false;
                    break;
                }

            if (isprime) countprimes++;
        }

        return countprimes;
    }



    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        Stopwatch sw = new Stopwatch();

        sw.Start();
        int …
Run Code Online (Sandbox Code Playgroud)

c# c++ benchmarking

6
推荐指数
4
解决办法
6083
查看次数