小编Abe*_*bel的帖子

查找具有相同内部表示的float/double的最小值/最大值

刷新浮点(也是PDF),IEEE-754并参与有关转换为字符串时浮点舍入的讨论,让我修补一下:如何获得给定浮点数的二进制表示的最大值和最小值是平等的.

免责声明:对于本次讨论,我喜欢坚持IEEE-754所描述的32位和64位浮点.我对扩展浮点(80位)或四边形(128位IEEE-754-2008)或任何其他标准(IEEE-854)不感兴趣.

背景:计算机不能0.1用二进制表示来表示.在C#中,float表示3DCCCCCD内部(C#使用round-to-nearest)和double表示3FB999999999999A.相同的位模式用于十进制0.100000005(float)和0.1000000000000000124(double),但不用于0.1000000000000000144(double).

为方便起见,以下C#代码给出了这些内部表示:

string GetHex(float f)
{
    return BitConverter.ToUInt32(BitConverter.GetBytes(f), 0).ToString("X");
}

string GetHex(double d)
{
    return BitConverter.ToUInt64(BitConverter.GetBytes(d), 0).ToString("X");
}

// float
Console.WriteLine(GetHex(0.1F));

// double 
Console.WriteLine(GetHex(0.1));
Run Code Online (Sandbox Code Playgroud)

在这种情况下0.1,没有用相同的位模式表示的低十进制数,任何0.99...99将产生不同的位表示(即,在内部为0.999999937yield产生浮点数3F7FFFFF).

我的问题很简单:如何找到内部存储在同一二进制表示中的给定float(或double)的最低和最高十进制值.

为什么 :(我知道你会问)在转换为字符串时从.NET中舍入时发现错误,当它从字符串转换时,找到内部精确值并更好地理解我自己的舍入错误.

我的猜测是这样的:取尾数,移除其余部分,得到其精确值,得到一个(尾数位)更高,并计算平均值:低于该值的任何东西将产生相同的位模式.我的主要问题是:如何将小数部分作为整数(位操纵它不是我最强的资产).Jon Skeet的DoubleConverter课程可能会有所帮助.

.net c# floating-point bit-manipulation ieee-754

7
推荐指数
1
解决办法
2108
查看次数

如何从源视图(aspx)中的C#按钮添加事件处理程序

从HTML源视图中创建一个按钮,创建代码隐藏(webforms)事件处理程序的最简单方法是什么?

在VB.NET中,很容易切换到页面后面的代码,并使用顶部的对象和事件组合框来选择和创建.

在c#中缺少那些(我真的不喜欢设计视图).

c# asp.net

7
推荐指数
2
解决办法
6397
查看次数

7
推荐指数
1
解决办法
1601
查看次数

始终使用this-keyword作为前缀(自动)属性是一种好习惯吗?

自从我发现汽车房产以来,我试着到处使用它们.以前我会在课堂上使用的每个属性都会有一个私人成员.现在这被auto属性所取代.我通常使用普通成员字段的方式在我的类中使用该属性.问题是该属性以国会大厦开始,这使得在以这种方式使用它时看起来有点奇怪.我之前并不介意属性从国会大厦开始,因为它们总是落后于"点".现在我发现自己在内部添加了我内部使用的所有属性this.,以此来抚慰我的感觉.

我的困境是,在我总是有点反对使用内部成员的所有用法前缀this.,除非"必要"(如在setter或构造函数中).所以我有点想找到第二个意见.有没有一个标准的好方法来做到这一点?我应该停止抱怨(我倾向于成为"蚂蚁驼背"(荷兰语表达))?

之前:

class Foo
{
    private Bar bar;
    public Bar Bar { get { return bar; } }

    public Foo(Bar bar)
    {
        this.bar = bar;
    }

    public void DoStuff()
    {
        if(bar != null)
        {
            bar.DoMethod();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

后:

class Foo
{
    public Bar Bar {get; private set;}

    public Foo(Bar bar)
    {
        this.Bar = bar;
        // or
        Bar = bar;
    }

    public void DoStuff()
    {
        if(this.Bar != null)
        {
            this.Bar.DoMethod();
        }
        // or
        if(Bar != …
Run Code Online (Sandbox Code Playgroud)

c# this automatic-properties prefix

7
推荐指数
2
解决办法
400
查看次数

如何在不使用HttpContext.Current的情况下获取ASP.NET Web应用程序的物理位置?

我发现自己需要根据相对于正在运行的ASP.NET Web应用程序的物理位置的文件来配置log4net.我们希望尽早启动记录器,所以Application_Start似乎是一个合适的地方.在IIS6中,这工作正常并且已经运行了很长时间,但现在我们转移到IIS7,这将不再起作用:

string absolutePath = HttpContext.Current.Request.PhysicalApplicationPath;
Run Code Online (Sandbox Code Playgroud)

因为HttpContext.Current在许多global.asax(应用程序,会话)事件中不可用.这是旧闻,我们都知道它引发了现在臭名昭着的请求在此上下文错误中不可用.我们不想回到经典模式.

现在,问题很简单:没有使用HttpContext,是否可以找到当前运行的Web应用程序实例的物理位置?

c# asp.net iis-7 .net-3.5

7
推荐指数
1
解决办法
8478
查看次数

处理HtmlControl

根据VS中Code Code的建议来调用一个对象上的Dispose(我之前并不是这样)我最终得到了一个包含这个的方法:

using (var favicon = new HtmlLink
                         {
                             Href = "~/templates/default/images/cc_favicon.ico"
                         })
{
    favicon.Attributes.Add("rel", "shortcut icon");
    Header.Controls.Add(favicon);
}
Run Code Online (Sandbox Code Playgroud)

这让我有点困惑,如果我将这个对象添加到Controls集合之后处理这个对象是个好主意吗?

这怎么样仍然有效?是因为Controls.Add方法在使用后处理对象而不是坚持它?

resharper webforms idisposable visual-studio-2010

7
推荐指数
1
解决办法
263
查看次数

如何从另一个文件夹中加载的程序集中获取类型?

我使用以下代码:

Assembly.LoadFile("the assembly in another folder");
var type = Type.GetType("the full name of the type");
Run Code Online (Sandbox Code Playgroud)

尽管在这行代码之前已经加载了程序集,但它总是返回null type.

PS:我确实传递了程序集限定名,包括名称空间,类型名称,程序集名称,版本和公共令牌.

.net c# reflection

7
推荐指数
2
解决办法
7079
查看次数

无法将"System.Random"类型的对象强制转换为"System.IConvertible"类型

我正在使用Random函数编写一个小的Heads或Tails程序,并接收一个Unable来强制转换'System.Random'类型的对象来输入'System.IConvertible'消息,我不知道为什么.有人可以轻松一点.谢谢.

protected void Button1_Click(object sender, EventArgs e)
{
    Random rNum = new Random();
    rNum.Next(2, 47);


    int rrNum = Convert.ToInt32(rNum);

    string result;
    result = (rrNum % 2 == 0) ? "Heads" : "Tails";
    lblResult.Text = result;

}
Run Code Online (Sandbox Code Playgroud)

.net c#

7
推荐指数
1
解决办法
4807
查看次数

项目中不存在Microsoft.Web.Publishing.targets的BeforeTargets属性中列出的目标MvcBuildViews,将被忽略

在TeamCity构建中,我看到一堆(大约80到120左右)的行看起来完全像下面的那样(只有时间戳改变),我不知道他们做了什么或如何解决它们(构建总计成功):

[05:58:44] [步骤1/3]目标"MvcBuildViews"在"C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web"的BeforeTargets属性中列出. Publishing.targets(839,131)"在项目中不存在,将被忽略.

或者,没有记录器垃圾的更短形式:

项目中不存在BeforeTargets属性Microsoft.Web.Publishing.targets(839,131)中列出的目标"MvcBuildViews" ,将被忽略.

除了奇怪的是他们出现并且反复重复,最近在列表中间的某个地方,时间差距很大:

[05:58:44] [步骤1/3]目标"MvcBuildViews"[...]
[06:19:38] [步骤1/3]目标"MvcBuildViews"[...]

导致我们的构建总共运行大约30分钟而不是"正常"运行大约5分钟左右.

谷歌搜索这个消息没有给我任何打击,所以我估计我解决这个问题的机会相当渺茫,但如果有人之前遇到过这个,并且知道是什么导致了这个,我会非常有兴趣知道一个解决方案.

这个项目是用VS 2010构建的(是的,我们需要更新,真的),TeamCity的版本是9.1.3.

PS:暗示这个警告可能带来什么(除了显然与MVC有关)以及从哪里开始寻找解决方案当然同样受欢迎;)

c# msbuild teamcity visual-studio-2010

7
推荐指数
1
解决办法
2987
查看次数

管道或组合的类型推断失败,正常的函数调用成功

我现在很少用F#进行这种斗争,但是再次类型继承与F#相比并不常见,所以也许我只是幸运.或者我错过了显而易见的事实.通常当编译器抱怨不知道某种类型时,我会反转管道或合成操作数的顺序,而且我已经完成了.

基本上,给定一个函数调用g(f x),它也可以作为x |> f |> g(f >> g) x.但今天它不......

这是我的意思的一个混乱的概念证明:

module Exc =
    open System

    type MyExc(t) = inherit Exception(t)

    let createExc t = new MyExc(t)
    type Ex = Ex of exn
    type Res = Success of string | Fail of Ex with
        static member createRes1 t = Ex(createExc(t)) |> Fail   // compiled
        static member createRes2 t =  t |> createExc |> Ex |> Fail  // FS0001
        static member createRes3 = createExc >> …
Run Code Online (Sandbox Code Playgroud)

inheritance f# contravariance piping function-composition

7
推荐指数
1
解决办法
92
查看次数