Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как раскусить переменную типа Double


Автор: MichaelKr 28.11.2004, 00:22
Дали задание написать класс "Обыкновенная Дробь" , одна из метод класса - создание обыкновенной дроби из десятичной. То есть я должен умножить десятичную дробь на число 10 в степени "количество знаков после запятой" и затем сократить (уже написал методу), но вот как узнать сколько их там есть ? В мантиссе типа double, 17 знаков по моему, но что то мне кажется что умножать на 10 в 17 и сокращать не поможет. Может есть какая-то функция по определению числа знаков после запятой ?

Автор: JackYF 28.11.2004, 01:40
double, по-моему, хранит только 8 значащих цифр числа.
А мантисса содержит 308 знаков.

Автор: sergejzr 28.11.2004, 01:57
Точность
Для float 6 знаков (всего)
Для double 15 (всего)
Для long double 19 (всего)

Всего означает до и после запятой.
т.е если у float до запятой 3 знака, то после считаются ещё 3 и всё smile

Тут надо мучится. потому как о стандартных функциях определения, сколько именно знаков после запятой я не слышал smile
Да и плохо себе представлайю, как это сделать кроме как не стандартными методами...

Автор: bel_nikita 28.11.2004, 02:13
MichaelKr
Цитата
Дали задание написать класс "Обыкновенная Дробь"
Я так понимаю, в классе должно быть два поля: целое и десятичное. И перегрузить арифметические операторы, и так же присваивания.
Или не так?

Автор: sergejzr 28.11.2004, 02:20
Цитата(bel_nikita @ 28.11.2004, 01:13)
Я так понимаю, в классе должно быть два поля: целое и десятичное. И перегрузить арифметические операторы, и так же присваивания.
Или не так?

Нет. я думаю это просто числитель и знаменатель. Стандартное задание. Очень неплохо помогает начать понимать ООП smile
Кстати полученный тип намного точнее даже дабла smile

Автор: Messages 28.11.2004, 07:42
Repeat ... until;

Автор: MichaelKr 28.11.2004, 12:12
Цитата
Нет. я думаю это просто числитель и знаменатель


Именно.
То есть если стандартных методов нету , то остается только умножать на 10 в степени максимальной экспоненты, брать от этого ( int ), и сокращать ? (кстати по моему 10 в 1024 степени в int не влезет)
То есть получим что-то типа :
Код

bruch bruch::makeBruch(double dezimal)
{
bruch temp(1,1);
temp.zaehler = (int) (dezimal*pow(10,1024));
temp.nenner = pow(10,1024);
temp.kurzer();
return temp;
}

или я как всегда перенедопонял ?

Автор: Messages 30.11.2004, 06:54
А зачем нам int? Целого числа в Double не существует? Да и нужно нам выделять несколько разрядов до и после запятой. Зачем нам ВСЁ? Дробь потои сократится, если на то пошло.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)