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

Printf лжет при выводе чисел с плавающей точкой? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа для предотвращения запуска определенных процессов во время работы приложения http://www.cyberforum.ru/cpp/thread1645344.html
Доброго времени суток. Я мало знаком с программированием в целом, и мне нужна помощь, может какие конкретные инструкции. Если точнее, то нужна программа, которая будет блокировать запуск определенных процессов в тот момент, когда запущено конкретное приложение
C++ Искусственный интеллект для мобов Доброго времени суток. Мне нужно написать искусственный интеллект для мобов в игре-платформере. Что можете посоветовать? С чего начать? О чем именно почитать гайды? http://www.cyberforum.ru/cpp/thread1645180.html
Как построить точку в проекции Гаусса-Крюгера C++
Здравствуйте! Столкнулся с такой задачей, даны такие координаты x = 6396700 и y = 5594500, как по этим данным определить координаты точки смещенной на 100 метров по x и y
C++ Ошибка "неопределенная ссылка" при работе с std::thread
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, "неопределенная ссылка " . К примеру: #include <iostream> #include <chrono> #include <thread> #include <mutex>
C++ Сравнение двух предложений по смыслу http://www.cyberforum.ru/cpp/thread1642136.html
Необходимо сравнить два коротких предложения по смыслу. Я так понимаю, нужно семантическое сравнение предложений. Как его можно реализовать? Есть какие-то бесплатные библиотеки?
C++ Перегрузка шаблонных функций Есть шаблонный класс А, шаблонный параметр которого - это тип его поля. Есть шаблонные классы В и С, шаблонные параметры которых - тип класса, на основе которого будет определяться их поведение, и тип поля этого класса. По умолчанию это А. template <class T> class A{ private: T var; public: подробнее

Показать сообщение отдельно
Danvern
 Аватар для Danvern
40 / 39 / 3
Регистрация: 22.06.2010
Сообщений: 415
Записей в блоге: 1
23.01.2016, 08:32     Printf лжет при выводе чисел с плавающей точкой?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
void doubleToString(double v, char * str){
    if(v < 0) {
        *str = '-';
        v = -v;
    }
    int number = static_cast<int>(v);
    double exp = v - static_cast<double>(number);
    const char * digits = "0123456789";
    char strExp[32] = {0};
    char * p = strExp;
    exp *= 10.0;
    do {
        *p++ = digits[static_cast<int>(exp) % 10];
        exp -= static_cast<double>(static_cast<int>(exp));
        printf("%.10lf %lf\n", exp, static_cast<double>(static_cast<int>(10 * exp)));
        exp *= 10.0;
    } while(static_cast<int>(exp) != 0);
    
    char strNum[32] = {0};
    p = strNum;
    do {
        *p++ = digits[(number % 10)];
        number = number / 10;
    } while(number != 0);
    
    int length = strlen(strNum);
    for(int i = 0; i < length / 2; ++i) {
        char c = strNum[i];
        strNum[i] = strNum[length - i - 1];
        strNum[length - i - 1] = c;
    }
    p = strNum;
    while(*p) {
        *str++ = *p++;
    }
    *str++ = '.';
    
    p = strExp;
    while(*p) {
        *str++ = *p++;
    }
    
}
 
int main() {
    char buf[64] = {0};
    double v = 1.23;
    doubleToString(v, buf);
    printf("ret= %s %lf\n", buf, v);
    return 0;
}
Вывод:
Код
1.0000000000 9.000000
1.0000000000 9.000000
1.0000000000 9.000000
1.0000000000 9.000000
0.9999999998 9.000000
0.9999999982 9.000000
0.9999999822 9.000000
0.9999998224 9.000000
0.9999982236 9.000000
0.9999822364 9.000000
0.9998223643 9.000000
0.9982236432 9.000000
0.9822364316 9.000000
0.8223643161 8.000000
0.2236431606 2.000000
0.2364316060 2.000000
0.3643160600 3.000000
0.6431605997 6.000000
0.4316059975 4.000000
0.3160599750 3.000000
0.1605997495 1.000000
0.6059974954 6.000000
0.0599749535 0.000000
ret= 1.2299999999999999822364316 1.230000
Собственно вопрос в заголовке темы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru