Предположим, I
- это некоторый целочисленный тип, а F
- некоторый (действительный) тип с плавающей запятой.
Я хочу написать две функции. Первая функция должна принимать значение i
типа I
и возвращать логическое значение, указывающее, попадает ли i
, преобразованный в F
, в представимый диапазон, т. Е. Будет ли (F)i
иметь определенное поведение.
Вторая функция должна принимать значение f
типа F
и возвращать логическое значение, указывающее, попадает ли f
, преобразованный в I
, в представимый диапазон, т. Е. Будет ли (I)f
иметь определенное поведение.
Можно ли написать такую функцию, которая в каждой реализации, соответствующей стандарту, будет корректной и не будет демонстрировать неопределенного поведения для любого ввода? В частности, я не хочу предполагать, что типы с плавающей запятой являются типами IEEE 754.
Я спрашиваю как о C, так и C ++ и их соответствующих стандартных версиях отдельно, на случай, если это изменит ответ.
По сути, целью этого вопроса является выяснить, возможны ли (разумные) преобразования с плавающей запятой / интегральной, не полагаясь на IEEE 754 или другие стандарты или аппаратные детали вообще. Я спрашиваю из любопытства.
Сравнение с, например, INT_MAX
или FLT_MAX
не представляется возможным, поскольку неясно, в каком типе проводить сравнение, не зная, какой из типов ширедиапазон.