我一直在寻找用于计算的有效方法b(说a = 2和b = 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()函数时,我可以看到内部发生了什么的一些资源?
当我读到有关C#或Java等JITted语言的性能时,作者通常会说它们理论上应该/可以胜过许多本机编译的应用程序.理论上,本机应用程序通常只是为处理器系列(如x86)编译,因此编译器无法进行某些优化,因为它们可能并非真正在所有处理器上进行优化.另一方面,CLR可以在JIT过程中进行特定于处理器的优化.
有谁知道微软(或Mono)的CLR在JIT过程中是否实际执行特定于处理器的优化?如果是这样,有什么样的优化?
不久前我写了一个程序,它使用了一些阶乘函数.我使用long double数据类型来支持"相对"大数字.
现在,我从代码块改为Visualstudio 2010,我想知道为什么我的程序不再工作,直到我在一些研究中意识到MS已经放弃了长双数据类型.这有什么特别的原因吗?对我而言,它看起来非常像技术方面的倒退.
有没有其他选择?(我也很乐意使用boost库中的替代品).
我最近一直在使用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实现.
干杯
我现在已经做了几年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) 当你处理繁重的计算时,当你需要使用原始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# ×5
c++ ×4
.net ×3
optimization ×2
benchmarking ×1
clr ×1
collections ×1
frameworks ×1
jit ×1
long-double ×1
math ×1
performance ×1
pow ×1
sqrt ×1