我有一个用Microsoft Visual C++ 6.0编写的应用程序.现在我使用C#在Visual Studio 2010中重写了应用程序,但由于精度问题,结果不匹配.其中一个精确问题是以下问题.
float a = 1.0f;
float b = 3.0f;
float c = a / b;
Run Code Online (Sandbox Code Playgroud)
在Visual Studio 2010中运行时,这是C#代码,给出cvalue =0.333333343
但是相同的代码,在值定义中的值之后删除f,当在Visual C++ 6.0上运行时给出c值= 0.333333.
任何人都可以解决它并解释在Visual Studio和Visual C++ 6.0中获得相同c值的方法吗?
实际上,这些值来自观察窗口.我开始知道不同版本的visual studio在浮点格式表示方面可能有所不同.因此,手表中的值可能没用.这就是我在两个visual studio版本中打印值的原因,结果如下.使用visual c ++语言的visual studio 6.0,它是0.333333(六个3)
但是使用C#语言的visual studio 10它是0.3333333(七个3)
那么有人可以帮助我使我的C#程序产生与visual C++相同的结果吗?(即如何使浮动操作在两个版本上产生相同的结果???)
double b = 1.5 * a,哪里a是float变量.
将a被强制转换为double上的Visual Studio 2010在Visual C#执行乘法之前?
假设浮点数float a = (1.5 * b)在哪里b,那么这个表达式是如何评估的?被1.5视为双或浮动?
open System
open System.Diagnostics
open System.Threading.Tasks
open System.Collections
let computation input =
input|> Array.map (fun x-> sqrt(float x))|> ignore
let computation1 (input:int[]) =
input|> Array.map (fun x-> Convert.ToString(x,2)) |> ignore
let abc p =
for i in 1..50000 do
[|for i in 1..100000 -> i|]
|> computation
Parallel.For(0,100,fun x->abc 0) |>ignore
Run Code Online (Sandbox Code Playgroud)
嗨,在上面的程序中如果我在" abc() "中使用" computation() " 运行应用程序,我看到CPU利用率为70-80%.
但是在" abc () "中使用" calculate1() "的代码相同,我看到只有20%的CPU利用率,而且我看到很多(一半内核)内核空闲.
有没有人对这种行为有所了解?
我的CPU规格:Intel Xeon CPU @ 3.40Hz,启用超线程总核心:2个CPU,每个8核= 16个总核心,HT = 2*16 = 32