Dan*_*ulp 2 vb.net double code-formatting visual-studio-2012
一个非常奇怪的,可能意味着Visual Studio 2012的有用行为.当我在vb.net中输入double时,如:
Dim myD as Double = 1.4
Run Code Online (Sandbox Code Playgroud)
当我按下Enter键以另一种方式移动我的焦点时,格式化开始并将上面的内容更改为:
Dim myD as Double = 1.39999999999999998
Run Code Online (Sandbox Code Playgroud)
或1.6作为
Dim myD as Double = 1.6000000000000001
Run Code Online (Sandbox Code Playgroud)
所有双打似乎都不会发生此行为.1.3,1.5,1.7和1.8请看这个youtube电影中的行为:http: //youtu.be/afw4jg58-aU
为什么,更重要的是,我该如何防止这种情况?
编辑:
安装的扩展程序是:

第二次编辑
这种行为似乎消失了.我不知道是什么造成了这种情况,以便将来参考,这对任何人都没用,但就目前而言,我很高兴我没有按照建议进行故障排除.
在这个问题中也报告了完全相同的问题.哪个适用于VS2010,否则没有可用的答案.
这是一个环境问题,代码被加载到Visual Studio中,与计算机上的FPU控制字混淆.它是一个处理器寄存器,用于确定浮点运算的工作方式,如下所示:

舍入控制位是这样的一个很好的麻烦来源,它们确定内部80位精度浮点值如何被截断为64位.选项是向上舍入,向下舍入和舍入到最近.精确控制位也是一个很好的选择,选项是完整的64位精度,53和24位.
VS2012和.NET Framework都依赖于操作系统默认值,期望之后不会发生变化.当代码确实改变它时,很难诊断出问题,你的观察结果非常适合这种模式.最常见的麻烦制造者是:
在没有D3DCREATE_FPU_PRESERVE选项的情况下使用DirectX的代码.DirectX重新编程精度和舍入控制位以挤出更多的性能.
用较旧的Borland语言产品编写的代码.其运行时库以非标准方式初始化FPU控制字.否则,软件的一般问题依赖于旧的运行时库或在以后的版本中执行的旧的旧式初始化.
通常,任何使用媒体编解码器或媒体API的代码.这样的代码倾向于重新编程FPU以挤出perf,原因与DirectX相同.特别是在我工作的产品中臭名昭着,其中大量使用这种编解码器.代码库充满了在调用外部代码后重置FPU控制字的调用.
查找和删除此类代码可能非常困难.DLL会被各种各样的预期恶意软件注入另一个进程.SysInternals的Autoruns实用程序非常有用,它显示了注入代码的所有可能方式,并且可以通过一种简单的方法来禁用它.准备好对你所看到的内容感到震惊,并随时禁用不带微软版权的内容.
对于动态注入,您需要一个调试器来查看加载到VS中的内容.再次启动VS并使用Tools + Attach to Process连接到第一个,选择非托管调试器.Debug + Windows + Modules显示加载了哪些DLL.请注意,DLL可以是瞬态的,像File + Open + File这样的shell对话框会动态地将shell扩展加载到VS中,然后再次卸载它们.祝你好运,你需要它,有时唯一的解决方案是相当激烈的.
| 归档时间: |
|
| 查看次数: |
523 次 |
| 最近记录: |