Почему C# допускает *неявное* преобразование из Long в Float, когда это может привести к потере точности?

Аналогичный вопрос Long in Float, почему? здесь не отвечает на то, что я ищу.

Стандарт C# допускает неявное преобразование из long в float. Но любое значение long больше 2^24, представленное в виде числа с плавающей запятой, обязательно потеряет свое «значение». В стандарте С# четко указано, что преобразование long to float может потерять «точность», но никогда не потеряет «величину».

Мои вопросы

  1. Применительно к целочисленным типам, что подразумевается под «точностью» и «величиной». Разве число n не полностью отличается от числа n+1, в отличие от действительных чисел, где 3,333333 и 3,333329 можно считать достаточно близкими для вычислений (т.е.в зависимости от того, чего хочет программист точности)
  2. Не разрешает неявное преобразование из long в float приглашение к скрытым ошибкам, поскольку это может привести к тому, что long "молча" потеряет значение (как программист C #, я привык к тому, что компилятор делает отличный оградить меня от подобных проблем)

Так что же могло послужить причиной того, что команда разработчиков языка C# разрешила это преобразование как неявное? Что мне здесь не хватает, что оправдывает неявное преобразование из long в float?

20
задан Community 23 May 2017 в 12:07
поделиться