Я на самом деле проверяю поведение приведения в C# в непроверенном контексте. Как сказано в документации, в непроверенном контексте приведение всегда выполняется успешно. Но иногда, в отдельных случаях, приведение от одного указанного типа c к другому типу дает неожиданный результат.
Например, я протестировал три приведения типа "double to sbyte":
var firstCast = (sbyte) -129.83297462979882752; // Result : 127.
var secondCast = (sbyte) -65324678217.74282742874973267; // Result : 0.
var thirdCast = (sbyte) -65324678216.74282742874973267; // Result : 0.
Просто чтобы прояснить, разница между вторым и третьим дублем составляет всего 1
(secondDouble - firstDouble = 1
). В этом случае результаты приведения, похоже, всегда равны 0
для любого "большого" двойного значения.
Мой вопрос: почему второе и третье приведение приводят к 0
? Я искал ответ в документации C#, но я не нашел ни одного.
Я протестировал вышеуказанное с помощью. Net Framework 4.7.2.