@Anonymous12344321

Почему при использовании breakpoint в окне локальных переменных не выводится отрицательный ноль?

using System;

namespace N
{
   class Program
   {
      static void Main(string[] args)
      {
         Console.WriteLine(0.0/-1.0);

         double c = 0.0 / -1.0; // Здесь breakpoint

         Console.WriteLine(c);
      }
   }
}


В первом Console.WriteLine в консоль выводится отрицательный ноль. Это происходит из-за того, что в функции происходит деление чисел типа double, которые могут быть представлены как знак, порядок и мантисса. В данном случае
знак у числа будет отрицательным. Во втором выводе происходит тоже самое. Но если в visual studio поставить breakpoint на переменную c и в процессе выполнения программы следить за ее значением, то вместо -0 в окне локальных переменных будет просто 0. Почему не учитывается знак нуля в окне локальных переменных? И можно ли как-нибудь исправить это?
618e73a2b6309542789110.png
  • Вопрос задан
  • 114 просмотров
Решения вопроса 2
Не отображается знак у нуля - от того что разработчики студии такие молодцы.
Если не устраивает такое поведение - пиши баг репорт.

Исправить, в теории, можно через кастомное расширение для студии
Ответ написан
GavriKos
@GavriKos
Проверял в райдере. Если ставить брейкпоинт там где вы указали - то все верно - 0. А если на след. строчке - -0.
Причина - брейкпоинт срабатывает ДО обработки строки на которой он установлен. Соответственно значение еще не вычислено для переменной с - и оно 0 (по умолчанию) (тут интересный момент откуда вообще c в этот момент взялось - но ладно). А уже на следующем шаге отладки - будет -0. Если посмотреть evaluate (не знаю есть ли такое в вижле) - тоже будет ноль с знаком.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Adler_lug
@Adler_lug
Имхо, тут больше вопросов к Console.WriteLine(c), чем к breakpoint, т.к. на что 0 не дели, будет 0.
Да и разве 0 может иметь отрицательное значение, учитывая, что это нейтральный "разделитель" между положительным и отрицательным числом?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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