Есть ли типы данных побольше double в студии?

Рейтинг: 0Ответов: 2Опубликовано: 21.02.2015

double и long double имеют одинаковый размер.

Однако doublе не подходит для работы со средними данными. Там, где начинаются миллионы и миллиарды, double впадает в это 3.0546e-005.

  1. Нужно, чтобы тип мог работать с миллиардами.
  2. Быть очень быстрым, не таким, как библиотеки длинной арифметики, которые используют строки, могут работать с числами гугл длины, но при этом жутко медленные.
  3. Повторял механику типа double. То есть был бы тип double_64, например, как у int_64, int_128 и т.д.

У меня идёт расчёт и получается число, например, 3421001.5422, но double его так не сможет вывести на экран. Как можно решить проблему? Только округляя значения?

Ответы

▲ 5Принят

Вам нужен не другой тип данных, а просто изучать, как менять способ вывода чисел с плавающей точкой на С++. 3.0546e-005 - это экспоненциальная нотация, означает буквально следующее: 3.0546 * (10 в степени -5), т.е. явно не миллионы или миллиарды, а очень даже наоборот: 0.000030546.

Сам по себе double с миллиардами вполне справляется. Насколько я помню, в double можно без потери точности положить просто знаковое целое число до 2 в 53 степени, а это около 9*(10 в степени 15).

Вот здесь можно почитать, как вывести число в более привычной вам нотации:

http://www.cplusplus.com/reference/ios/fixed/

В качестве бонуса, пример кода:

#include <iostream>

int main() {
    double a = 3421001.5422;
    std::cout << std::fixed << a;
    return 0;
}

Вывод:

3421001.542200

http://ideone.com/gbkLdR

▲ 2

Тип double для денег - сумасшествие. Деньги надо хранить как целое число центов/копеек/etc.