Простая проверка соглашения о двойной точности с использованием тригонометрических функций [duplicate]

Ссылка NullReferenceException или Object, не установленная на экземпляр объекта, возникает, когда объект класса, который вы пытаетесь использовать, не создается. Например:

Предположим, что у вас есть класс с именем Student.

public class Student
{
    private string FirstName;
    private string LastName;
    public string GetFullName()
    {
        return FirstName + LastName;
    }
}

Теперь рассмотрим другой класс, в котором вы пытаетесь получить полное имя учащегося.

public class StudentInfo
{      
    public string GetStudentName()
    {
        Student s;
        string fullname = s.GetFullName();
        return fullname;
    }        
}

Как видно из вышеприведенного кода, оператор Student s - объявляет только переменную типа Student, обратите внимание, что класс Student не создается в этой точке. Следовательно, когда выполняется выполнение инструкции s.GetFullName (), она выкинет исключение NullReferenceException.

5
задан tomshafer 26 May 2011 в 23:50
поделиться

2 ответа

Реальная, которая не отмечена как двойная точность, будет считаться одиночной точностью. Просто потому, что когда-нибудь позже вы назначите его переменной двойной точности или преобразуете ее в двойную точность, это не означает, что значение «магически» будет двойной точностью. Он не смотрит вперед, чтобы узнать, как будет использоваться значение.

8
ответ дан MRAB 31 August 2018 в 16:49
поделиться

Здесь есть несколько вопросов, поэтому полезно указать некоторые детали более подробно с примерами, особенно для новичков.

Как указано MRAB в его правильном ответе, выражение всегда оценивается без какого-либо контекста , поэтому

 0.12345678901234567890

является плавающим литералом по умолчанию (одиночный), независимо от того, где он появляется. То же самое относится к числам с плавающей запятой в экспоненциальной форме

 0.12345678901234567890E0

, это также номер точности по умолчанию.

Если вы хотите использовать постоянную с двойной точностью, можно использовать D вместо E в приведенной выше форме. Даже если такой константе двойной точности присваивается переменная точности по умолчанию, она сначала рассматривается как число двойной точности, а затем преобразуется в стандартную точность.

Способ, которым вы пользуетесь в своем вопросе (используя видная нотация и несколько констант вида) более общий и более современный, но принцип один и тот же.

 0.12345678901234567890_sp

является рядом видов sp и

 0.12345678901234567890_dp

является номером вида dp, и не имеет значения, где они появляются.

Как показывает ваш пример, речь идет не только о назначении. В строке

 c = DBLE(0.12345678901234567890)

сначала число 0.12345678901234567890 является значением по умолчанию. Затем он преобразуется в двойную точность DBLE, но это делается после того, как некоторые из цифр уже потеряны. Затем этому новому номеру двойной точности присваивается значение c.

2
ответ дан Vladimir F 31 August 2018 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: