Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Почему оператор -- не воздействует на long double? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Генерация случайных вещественных чисел в диапазоне 0..1 http://www.cyberforum.ru/cpp-beginners/thread190215.html
Какнить можно заставить rand() работать по аналогии в Паскале, т.е. выдавать числа от 0 до 1 (0,000000054, 0,743325235, 0,0052411 и подобно)??? Или может библиотеку подскажите, или может функция у...
C++ Как создать обычный файл exe, который могут открывать друзья. Всем доброе утро! Вопрос о том как сделать программу, которая запускалась бы одним файлом .exe. Создал программу (ну самую простейшую). #include <iostream> void main(){ printf ("hello... http://www.cyberforum.ru/cpp-beginners/thread190204.html
Для каждого числа от 1 до n найти произведение его четных делителей C++
Для каждого числа от 1 до n найти произведение его четных делителей. Вот написал вроде чёт не то! помогите исправить плиз.. int main() { int n,pro=1,d=2; cout << "Enter N = "; cin >> n;...
Вычисление многочлена Лежандра C++
Добрый вечер. Уже несколько дней пытаюсь решить 3-ю задачу: Я новичок в C — первый курс только. Я не могу понять математического смысла, поэтому не получается запрограммировать. Напишите...
C++ Рекурсивный обход роботом плоской фигуры http://www.cyberforum.ru/cpp-beginners/thread190188.html
Всем доброго времени суток. Помогите, пожалуйста, в решении задачи на рекурсию. Необходимо, чтобы пользователь нарисовал какую-либо фигуру, поставил в неё робота, и тот обошёл бы её полностью,...
C++ Возврат массива из функции Здравствуйте, Не пойму почему не работает данный код. Пишет cannot convert 'std::string*' to 'int*' in return По теории я жду адрес обработанного массива. В данном случае адреса a и temp должны... подробнее

Показать сообщение отдельно
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
13.11.2010, 20:06
В принципе тебе уже все сказали
В VS считает что long double == double
Точность у double - 16 десятичных цифр
Твое число просто не влазит нормально в double,
соответственно прибавление к нему единицы отваливается по точности

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
int main(void)
{
    long double n = 1163878298844645345.0L;
    
    cout.precision(20);
    cout << n << endl;
    cout << --n << endl;
    cout << --n << endl;
    
    return 0;
}
Запустим тест - увидим еще более интересный результат
Код
> test.exe
1163878298844645400
1163878298844645400
1163878298844645400

А c gcc понятно проблемы нету
Даже под Windows у gcc тип long double имеет точность 19 цифр
Что впрочем близко к пределу твоего числа
Сделай число чуть длинеее - и не поможет long double
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru