你们谁能解释为什么会这样?staticvoidMain(){constfloatxScaleStart=0.5f;constfloatxScaleStop=4.0f;constfloatxScaleInterval=0.1f;constfloatxScaleAmplitude=xScaleStop-xScaleStart;constfloatxScaleSizeC=xScaleAmplitude/xScaleInterval;floatxScaleSize=xScaleAmplitude/xScaleInterval;Console.WriteLine(">constfloat{0},
几年前,我学到了有关float精度问题的艰难方法,所以我不再使用它们。然而,我仍然遇到使用float的代码,这让我感到畏缩,因为我知道有些计算会不准确。那么,什么时候适合使用float呢?编辑:作为信息,我认为我没有遇到过数字准确性不重要的程序。但我有兴趣听听例子。 最佳答案 简短的回答:只有当您确切地知道自己在做什么以及为什么这样做时,您才需要使用float。长答案:据我所知,floats(相对于doubles)在3DAPI之外不再真正使用。float和double在现代CPU上具有相同的性能特征,double更大一些,仅此而已。
我有一个Floats数组,需要将其转换为字节数组并返回到float[]...谁能帮我正确地做到这一点?我正在使用bitConverter类,发现自己无法尝试附加结果。我这样做的原因是我可以将运行时值保存到IO流中。如果重要的话,目标存储是Azure页面blob。我不关心它存储在什么字节序中,只要它的输入与输出相匹配即可。staticbyte[]ConvertFloatToByteArray(float[]floats){byte[]ret=newbyte[floats.Length*4];//asinglefloatis4bytes/32bitsfor(inti=0;i
在CSharp中解析float的最佳方法是什么?我知道TryParse,但我特别想知道的是点、逗号等。我的网站有问题。在我的开发服务器上,','代表小数,'.'为分隔符。但是在产品服务器上,情况正好相反。我怎样才能最好地捕捉到这一点? 最佳答案 我同意leppie的回复;用代码来表达:strings="123,456.789";floatf=float.Parse(s,CultureInfo.InvariantCulture); 关于c#-解析float的最佳方法?,我们在StackOv
我将一个浮点值设置为NaN(在监window口中看到),但我不知道如何在代码中检测到它:if(fValue==float.NaN)//returnsfalseeventhoughfValueisNaN{} 最佳答案 你想要float.IsNaN(...)。与NaN的比较总是返回false,无论float的值是多少。这是float的怪癖之一。这意味着您可以这样做:if(f1!=f1){//Thisconditionalwillbetrueiff1isNaN.事实上,这正是IsNaN()的工作原理。
我已经阅读了很多关于.NET中的浮点确定性的文章,即确保具有相同输入的相同代码将在不同机器上产生相同的结果。由于.NET缺少Java的fpstrict和MSVC的fp:strict等选项,theconsensusseemstobe使用纯托管代码无法解决此问题。C#游戏AIWars已决定使用Fixed-pointmath相反,但这是一个麻烦的解决方案。主要问题似乎是CLR允许中间结果存在于精度高于类型的native精度的FPU寄存器中,从而导致无法预测的更高精度结果。一个MSDNarticlebyCLRengineerDavidNotario解释如下:Notethatwithcurren
只需阅读此fascinatingarticle关于使用非规范化float(非常接近0的float)的IntelCPU可能会导致20x-200x的减速。SSE有一个选项可以将它们四舍五入为0,从而在遇到此类浮点值时恢复性能。C#应用程序如何处理这个问题?是否有启用/禁用_MM_FLUSH_ZERO的选项? 最佳答案 没有这样的选项。C#应用程序中的FPU控制字在启动时由CLR初始化。更改它不是框架提供的选项。即使您尝试通过调用_control87_2()来更改它那么它不会持续很长时间;任何异常都会导致控制字被CLR内部的异常处理实现再
多文化编程中有趣的部分之一是数字格式。美国人使用10,000.50德国人使用10.000,50法语使用10000,50我的第一种方法是获取字符串,向后解析它直到遇到分隔符并将其用作我的小数点分隔符。这有一个明显的缺陷:10.000会被解释为10。另一种方法:如果字符串包含2个不同的非数字字符,则使用最后一个作为小数点分隔符并丢弃其他字符。如果我只有一个,请检查它是否出现不止一次,如果出现则丢弃它。如果它只出现一次,请检查它后面是否有3位数字。如果是,则丢弃它,否则,将其用作小数点分隔符。显而易见的“最佳解决方案”是检测用户的文化或浏览器,但如果您的法国人使用的是en-USWindows
例子:floattimeRemaining=0.58f;为什么这个数字的末尾需要f? 最佳答案 您的float声明包含两部分:声明变量timeRemaining类型为float.它赋值0.58到这个变量。问题出现在第2部分。右侧是自行求值的。根据C#规范,包含小数点但没有后缀的数字被解释为double。.所以我们现在有一个double我们要分配给float类型变量的值.为此,必须从double进行隐式转换。至float.没有这样的转换,因为您可能(在这种情况下确实)在转换中丢失信息。原因是编译器使用的值并不是真正的0.58,而是最接
我做了一些计时测试,也阅读了一些文章,比如thisone(最后一条评论),看起来在Release构建中,float和double值花费相同的处理时间。这怎么可能?当float与double值相比精度较低且较小时,CLR如何才能在相同的处理时间内获得double值? 最佳答案 至少在x86处理器上,float和double将分别由FPU转换为10字节的实数进行处理。FPU没有针对其支持的不同浮点类型的单独处理单元。float比double快的古老建议在100年前应用,当时大多数CPU没有内置FPU(而且很少有人有单独的FPU芯片),因