Мне интересно, если число представляется одним способом в представлении с плавающей запятой, будет ли оно представлено таким же образом в представлении, которое имеет больший размер.
То есть, если число имеет конкретное представление в виде float
, будет ли оно иметь такое же представление, если это float
приведено к double
, а затем остается таким же, когда приведено к long double
.
Мне интересно, потому что я пишу реализацию BigInteger и любое переданное число с плавающей запятой отправляю в функцию, которая принимает long double
для ее преобразования. Что приводит меня к моему следующему вопросу. Очевидно, что плавающие точки не всегда имеют точные представления, поэтому в моем классе BigInteger, что я должен пытаться представить, когда дано число с плавающей точкой. Разумно ли пытаться представлять то же число, которое дано std::cout << std::fixed << someFloat;
, даже если оно не совпадает с переданным числом. Это самое точное представление, которое я смогу получить? Если так, то ...
Каков наилучший способ извлечь это значение (в базовой степени 10), на данный момент я просто беру его как строку и передаю его моему строковому конструктору. Это сработает, но я не могу помочь, но чувствую, что есть лучший способ, но, конечно, брать остаток при делении на мою базу не совсем точно с поплавками.
Наконец, мне интересно, есть ли эквивалент с плавающей запятой, равный uintmax_t
, это типовое имя, которое всегда будет самым большим типом с плавающей запятой в системе, или нет точки, потому что long double
всегда будет самым большим (даже если он такой же, как двойной).
Спасибо, Т.