Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 02.03.2020
Сообщений: 3

Программа неправильно считает

12.03.2020, 00:41. Показов 1537. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
У меня появилась проблема с тем что программа выдает непавильный результат от простых математических действий

код:

C++
1
2
double res = H * y + offsetY;
SDL_Log("%f=%f*%f+%f\n", res, H, y, offsetY);
вывод в консоль:

INFO: 0.000000=0.062500*0.031250+0.000000

Пробовал вместо всех переменных подставлять свои значения и все работало правильно.
Такую проблему вижу первый раз.

Использую бесплатную версию Visual Studio c++ 2019 16.4.4

весь код класса:

Texture.h:
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
#pragma once
 
#include <vector>
#include <string>
#include <SDL.h>
 
#include "Types.h"
 
class Texture
{
    public:
    
        Texture();
        
        void rename(const char* new_name);
        double X(const double x);
        double Y(const double y);
        void setOffset(const float x, const float y);
        void setSize(const float x, const float y);
        
        char name[TEXTURE_NAME_MAX_SIZE];
        uint cam_tex_id;
        uint gl_tex_id;
        float offsetX;
        float offsetY;
        float W;
        float H;
        bool  isRotated;
    
        std::vector<Texture*>* VecTexture;
    
        uint _n;
};
Texture.cpp:
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
52
53
#include "Texture.h"
 
void Texture::rename(const char* new_name)
{
    for (uint i = 0; i < TEXTURE_NAME_MAX_SIZE && i < strlen(new_name); i++)
    {
        name[i] = new_name[i];
    }
}
 
Texture::Texture()
{
    for (uint i = 0; i < TEXTURE_NAME_MAX_SIZE; i++)
    {
        name[i] = '.';
    }
    cam_tex_id = 0;
    offsetX = 0.0f;
    offsetY = 0.0f;
    W = 1.0f;
    H = 1.0f;
    _n = VecTexture->size();
}
 
double Texture::X(const double y)
{
    const double __x = W * y;
    double a = (double)offsetX;
    return __x + a;// + (double)offsetX;
}
 
double Texture::Y(const double y)
{
    /*
    offsetY = 0.0f;
    H = 0.5f;
    double _y = 1.0f;*/
    double res = H * y + offsetY;
    SDL_Log("%f=%f*%f+%f\n", res, H, y, offsetY);
    return res;// + (double)offsetY;
}
 
void Texture::setOffset(const float x, const float y)
{
    offsetX = x;
    offsetY = y;
}
 
void Texture::setSize(const float x, const float y)
{
    W = x;
    H = y;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2020, 00:41
Ответы с готовыми решениями:

C++ неправильно считает
Сап. Писал код, понадобилось сделать цикл, в котором из переменной типа float будет вычитаться 0.1. Однако, почему-то в конце после 10 он...

Программа неправильно считает
Программа считает х и у неправильно, и при изменении формул в коде выдаёт одни и те же значения #include &lt;iostream&gt; #include...

программа неправильно считает
Здравствуйте написал программу но она считает неправильно кол-во столбцов либо не считает вовсе. Предполагаю что нужно что то менять...

3
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,145
12.03.2020, 10:00
поскольку выводится таки double, а не float, попробуй вместо %f использовать %lf

Добавлено через 2 минуты
а точнее - для offsetY и H всё же спецификатор %f, а для res и y - %lf

P.S. вообще, сделай все вещественные переменные какого-то одного типа, чтобы не путаться
0
0 / 0 / 0
Регистрация: 02.03.2020
Сообщений: 3
13.03.2020, 01:58  [ТС]
Я убрал все ненужные переменные и сделал везде float но ничего не изменилось

Я попробовал дописать в начале функции
C++
1
 offsetY = 0.0f;
и все считалось правильно
0
0 / 0 / 0
Регистрация: 02.03.2020
Сообщений: 3
14.03.2020, 18:18  [ТС]
Не могу точно понять с чем это было связано, но свою проблему я исправил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2020, 18:18
Помогаю со студенческими работами здесь

Программа неправильно считает
Вот код: uses crt,Graph; label b; var Gd, Gm:integer; n,m,n1,m1,k,l,no,lol,an:integer; q,r,r1,r2,t,s,s1,s2,s3,da,u,no1:string; ...

Программа неправильно считает
Я тут написал малюсенькую программу на С++ и к моему удивлению установил, что считает результат эта программа неправильно. Вот код...

Программа неправильно считает
Здравствуйте. Объясните пожалуйста такой парадокс. Ниже привожу решение одной из задач из книги Лафоре по переводу десятичных фунтов в...

программа неправильно считает
фрагмент кода a1 = 0.5*(((x*x) - (x*x))*f_x + ((x*x)-(x*x))*f_x + ((x*x)-(x*x))*f_x); a2 = (((x-x)*x) + ((x-x)*f_x) +...

Программа неправильно считает напряжение (U)
#include&lt;locale.h&gt; #include&lt;conio.h&gt; #include&lt;time.h&gt; #include&lt;stdlib.h&gt; #include&lt;iostream&gt; #include&lt;fstream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru