Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/50: Рейтинг темы: голосов - 50, средняя оценка - 4.60
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802

Посоветуйте функции для арифметики больших целых чисел

06.06.2024, 22:40. Показов 11490. Ответов 166
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сегодня начал писать свою библиотеку для работы с большими целыми числами.

Пока что реализовал следующие функции:

C++
1
2
3
4
5
6
7
8
9
10
11
12
std::string Add(const std::string&, const std::string&);
std::string Subtract(const std::string&, const std::string&);
std::string Multiply(const std::string&, const std::string&);
std::string Divide(const std::string&, const std::string&);
std::string Remainder(const std::string&, const std::string&);
std::string Power(const std::string&, const int);
std::string Factorial(const int);
std::string GCD(const std::string&, const std::string&);
std::string LCM(const std::string&, const std::string&);
std::string Abs(const std::string&);
std::string ISqrt(const std::string&);
std::string Fibonacci(const int);
Все эти функции работают с очень большими числами.
Что еще можете посоветовать? Какие важные функции я упустил?
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2024, 22:40
Ответы с готовыми решениями:

Ограничения VBA в реализации арифметики длинных (больших) чисел
Итак, моя юбилейная - первая тема на этом форуме. Здравствуйте Товарищи! Необходима помощь или совет от спецов этого форума. Работаю над...

Быстрая сортировка массива целых чисел, с использованием указателей и адресной арифметики
# include <stdio.h> # include <stdlib.h> void QuickSort(int *a, int size){ int *left = a; // Адрес 1 элемента int *right...

Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел
Написать шаблоны функций для для вычисления суммы произведений двух соседних чисел для трех целых чисел и в одномерном массиве целых чисел:...

166
 Аватар для Наталья8
638 / 396 / 68
Регистрация: 09.03.2016
Сообщений: 4,370
09.06.2024, 00:15
Студворк — интернет-сервис помощи студентам
Вот это самое ценное. В сети нету. Только для вас....
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
bool delete_line(HWND hWnd, const short *cnt, wchar_t *buf,
    wchar_t *comp,
    bool replase = false,
    bool insert = false)
         {            
    char key[63]{};
    bool iter_enter{ false };
static unsigned short it_x{};
const int indx_lst = SendMessage(GetDlgItem(hWnd, IDC_LISTBOX1), LB_GETCURSEL, (WPARAM)0, (LPARAM)0);
 
 
    static char and_time[64]{};
    sprintf(and_time, "%s%s%d%s","You are sure?   ", "Max lines of text <", cnt[indx_lst],">line.");
        if (replase){
        GetWindowTextA(GetDlgItem(hWnd, ID_EDIT), key, 63);
        if (strlen(key) == 0) {
            warn(L"EDIT control is empty");
            return false;
                }
        if (*(key + strlen(key) - 1) == '*' && memcmp(key, "http", 4) != 0)*(key + strlen(key) - 1) = '\0';
        else memset(key, 0, strlen(key));
         }
        if (MessageBoxA(NULL, and_time, "String operation", MB_OKCANCEL |
        MB_ICONQUESTION | MB_SETFOREGROUND | MB_SYSTEMMODAL) == IDCANCEL) return false;
    
    static char buf_char[BUFSIZ]{};
    char *zbuf = &buf_char[0];
    
    int orig_str_len{};
    bool del_one{ true };
    bool execution_order{ true };
 
    if (insert && replase){
        GetWindowTextW(GetDlgItem(hWnd, ID_EDIT), comp, BUFSIZ);
        int ind_edit
            = get_index(hWnd, comp);
        
            
        
        if ((ind_edit < indx_lst) && ind_edit != -1){
            execution_order = false;
            orig_str_len = change_line(zbuf, hWnd, true);
        } else { del_one = false;
            if (!(orig_str_len = change_line(zbuf, hWnd, false))) return false;
        }
        
        
    } else if (!(orig_str_len = change_line(zbuf, hWnd, false))) return false;
 
 
std::ifstream fin;
        fin.open(buf);
        fin.seekg(0, std::ios_base::end);
unsigned int volume = fin.tellg();
        fin.seekg(0, std::ios_base::beg);
        
        
        char *ms = (char*)realloc(NULL, volume+1);
        
        
        memset(ms, 0, volume+1);
        bool one(true);
    int len_data_line(0); 
        char edit_txt[64]{};
        GetWindowTextA(GetDlgItem(hWnd, EDIT_N), edit_txt, 64);
        short edit_txt_len = strlen(edit_txt);
        std::string msg = "";
        std::clock_t start;
        double duration;
        start = std::clock();
        
    while (getline(fin, msg))
        {
    char *cut_ptr = &msg[0];
    
    if (one || edit_txt_len)
    while (((cut_ptr = strchr(cut_ptr, 'h')) == NULL || *(cut_ptr + 1) != 't' || *(cut_ptr + 3) != 'p' || *(cut_ptr + 6) != '/'))
            {
                if (cut_ptr == NULL ){
 
                    cut_ptr = &msg[0]; 
        if (edit_txt_len) {
            do {
                if (!strncmp(cut_ptr, edit_txt, edit_txt_len))
                for (int z = 0; z < edit_txt_len; ++z)*(cut_ptr + z) = '*';
                ++cut_ptr;
               } while (*(cut_ptr + edit_txt_len) != '\0');
             }
 
cut_ptr = &msg[0] + strlen(msg.c_str());
                    len_data_line = strlen(msg.c_str()) + 2;
                break;
                    }
                ++cut_ptr;
                    }
        else cut_ptr = &msg[0] + strlen(msg.c_str());
            
            
            if (*key && *cut_ptr != '\0') {
         int i(0), end(strlen(key)-1);
                cut_ptr = strchr(&msg[0], '/') + 2;
                    while (*(cut_ptr + 1) != ' ' && *(cut_ptr + 1))
                    {
                    char tmp = *cut_ptr ^ key[i];
                        if ((int)tmp > 32)*cut_ptr = tmp;
                        cut_ptr++;
                if (i < end)i++;
                else i = 0;
                    }   }
            
 
            if (!*key && 
                *cut_ptr &&
    !memcmp(zbuf
        ,cut_ptr, orig_str_len))
                    {
            if (del_one &&(!replase || insert)){
    char *cut = (ms + (strlen(ms) - len_data_line));
         if (*(cut + 4) == '-' && 
            *(cut + 35) == '.' &&
            *(cut + 40) == '0' &&
            *(cut + 43) == ' ')*cut = '\0';
         if (insert)orig_str_len = change_line(zbuf, hWnd, false);
     del_one = false;
            
               printf("enable1\n");
                } 
              else {
                if (insert){
    add_line(&ms, msg.c_str(), volume);
            if (!del_one && execution_order){
        orig_str_len = change_line(zbuf, hWnd, true);
        del_one = true;
                        }
                    }
                printf("enable2\n"); 
         
        it_x = cnt[indx_lst] / 2; iter_enter = true;
                    } 
        if (insert){
                static short num{ 0 };
                    if (num++ == 1){
                num = 0; one = false;
                           }
                        }
                 else one = false;
 
             }
            else {
if (iter_enter && it_x-- == 0 ) {
        
                    char *i_sert = (char*)calloc(heap_buffer, sizeof(char));
                    GetWindowTextA(GetDlgItem(hWnd, ID_EDIT), i_sert, heap_buffer);
        strcat(ms, i_sert); strcat(ms, "\r\n"); iter_enter = false;
                    free(i_sert);
                 }
            add_line(&ms, msg.c_str(), volume);
                 } 
            }
        SendMessage(GetDlgItem(hWnd, EDIT_N), WM_SETTEXT, 0, (LPARAM)"");
                duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
    sprintf(strchr(and_time, '?') + 1, " (Time: %0.3f)", (float)duration);
 
            fin.close();
Beep(4000,10);
        std::ofstream fout;
        fout.open(buf, std::ofstream::binary);
 
        int share = strlen(ms);
        for (int next = 0; next < share; ++next)
            fout << ms[next];
        fout.close();
Beep(3000, 10);
    ms = (char*)realloc(ms, NULL);
    
    return true;
}
Добавлено через 11 минут
Обфускация не делал. И так ни кто ни чего не поймёт.
Я сам, что бы что то в ней изменить / доработать, три дня сидел вьезжал....
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 00:52  [ТС]
DrOffset, мне кажется, я сам не понимая этого, в итоге сделал, как и вы советовали

Мой заголовок выглядит так:

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
#pragma once
 
#include <iostream>
#include <string>
 
class BigInt
{
private:
    std::string value = "0";
    bool sign = false;
    bool nan = false;
public:
    BigInt()=default;
    BigInt(const std::string&);
    BigInt(const char* s);
 
    BigInt& operator=(const char*);
 
    const std::string& get_value() const;
    bool get_sign() const;
    bool get_nan() const;
    
    friend std::ostream& operator<<(std::ostream&, const BigInt&);
    friend BigInt operator+(const BigInt&, const BigInt&);
    friend BigInt operator-(const BigInt&, const BigInt&);
    friend BigInt operator*(const BigInt&, const BigInt&);
    friend BigInt operator/(const BigInt&, const BigInt&);
    friend BigInt operator%(const BigInt&, const BigInt&);
    friend BigInt operator^(const BigInt&, const int);
    friend bool operator>=(const BigInt&, const BigInt&);
    
    friend BigInt Abs(const BigInt&);
    friend BigInt Factorial(const int);
    friend BigInt GCD(const BigInt&, const BigInt&);
    friend BigInt LCM(const BigInt&, const BigInt&);
    friend BigInt ISqrt(const BigInt& x);
    friend BigInt Fibonacci(const int);
};
 
inline int IntegerQ(const std::string&);
inline BigInt Add(const BigInt& x, const BigInt& y){return x + y;}
inline BigInt Subtract(const BigInt& x, const BigInt& y){return x - y;}
inline BigInt Multiply(const BigInt& x, const BigInt& y){return x * y;}
inline BigInt Divide(const BigInt& x, const BigInt& y){return x / y;}
inline BigInt Remainder(const BigInt& x, const BigInt& y){return x % y;}
inline BigInt Pow(const BigInt& x, const int y){return x ^ y;}
 
BigInt Abs(const BigInt&);
BigInt Factorial(const int);
BigInt GCD(const BigInt&, const BigInt&);
BigInt LCM(const BigInt&, const BigInt&);
BigInt ISqrt(const BigInt&);
BigInt Fibonacci(const int);
Т.е. дабы не определять дважды все математические функции (один раз с friend в классе, и другой раз за пределами класса без friend), я смог избавиться повторения для тех функций, у которых есть перегруженные операторы.
inline функции (кроме IntegerQ) определил в заголовке, как это и принято делать. Иначе, компилятор выдает предупреждение (хотя, он норм относится к тому, что IntegerQ определяется в cpp файле).

Все работает норм. И даже IntelliSense перестал ругаться, когда я завел два файла (bigint.cpp и bigint.h)
1
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.06.2024, 01:03
Royal_X, только IntegerQ при таком варианте не должна быть inline. Она же в другом файле определена.

Добавлено через 2 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
выдает предупреждение
Что за предупреждение?
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 01:05  [ТС]
DrOffset, в другом файле я ее определил

int IntegerQ(const std::string& s)
{
//
}

и вызываю там просто как IntegerQ()

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Что за предупреждение?
когда попытался inline функции определять в cpp файле, то выдало предупреждение \ ошибку

inline function ... used but never defined
Потом я прочел в инете, что inline функции принято в заголовке определять, поэтому я так и сделал. Но странно, что IntegerQ тоже inline, однако она определилась в cpp файле и нет предупреждений. Возможно, это из-за того, что эта функция не работает с классом, там просто проверка строки и возврат инта.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
09.06.2024, 01:11
Royal_X, если функция определена в другой единице трансляции, то в заголовочном файле она не должна быть inline. Но в твоем случае похоже, что IntegerQ - это внутренняя функция для нужд реализации, и ее вообще не должно быть в заголовочном файле. Тогда ее можно оставить в cpp и сделать static inline (или вместо static в безымянный namespace сунуть), а из заголовочного файла убрать.

Добавлено через 2 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
. Но странно, что IntegerQ тоже inline, однако она определилась в cpp файле и нет предупреждений.
Это стрельнет, когда несколько ЕТ появится. Например ты сделаешь библиотеку, подключишь ее в другую ЕТ, и кто-то из позовет функцию IntegerQ, что скорее всего приведет к ошибке линковки. Причем возможно, что в отладочной версии библиотеки не приведет, а в релизной - приведет. В общем так не надо делать. Если функция инлайн, то она должна быть целиком определена в месте использования.
1
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 01:13  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Но в твоем случае похоже, что IntegerQ - это внутренняя функция для нужд реализации, и ее вообще не должно быть в заголовочном файле. Тогда ее можно оставить в cpp и сделать static inline
да, убрал из заголовочного файла и сделал static inline в cpp файле. Правда пришлось переместить на самый вверх, перед первым вызовом данной функции. Но так однозначно лучше. Имею в виду, что теперь юзер не сможет его вызвать. А то она она вызывалась как Add и прочие функции в main
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 05:59
Royal_X, ну и осталось сравнить шустродействие по сравнению с более старыми библиотеками про длинную арифметику
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 12:16  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
ну и осталось
нет, еще много чего нужно доделать

вот, новая версия заголовочного файла (добавил все операторы сравнения и унарный минус, а также убрал поле nan - сделал это, ибо была лишняя проверка на nan во всех функциях. Теперь просто assert стоит в конструкторах, а также в тех математических функциях, где нужно, например, при делении на 0).

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
54
55
56
57
58
59
60
61
62
63
64
65
66
#pragma once
 
#include <iostream>
#include <string>
 
class BigInt
{
private:
    std::string value = "0";
    bool sign = false;
public:
    BigInt()=default;
    BigInt(const std::string&);
    BigInt(const char* s);
 
    BigInt& operator=(const char*);
 
    const std::string& get_value() const;
    bool get_sign() const;
    
    friend std::ostream& operator<<(std::ostream&, const BigInt&);
 
    friend BigInt operator+(const BigInt&, const BigInt&);
    friend BigInt operator-(const BigInt&, const BigInt&);
    friend BigInt operator-(const BigInt&);
    friend BigInt operator*(const BigInt&, const BigInt&);
    friend BigInt operator/(const BigInt&, const BigInt&);
    friend BigInt operator%(const BigInt&, const BigInt&);
    friend BigInt operator^(const BigInt&, const int);
 
    friend bool operator>=(const BigInt&, const BigInt&);
    friend bool operator<=(const BigInt&, const BigInt&);
    friend bool operator==(const BigInt&, const BigInt&);
    friend bool operator!=(const BigInt&, const BigInt&);
    friend bool operator>(const BigInt&, const BigInt&);
    friend bool operator<(const BigInt&, const BigInt&);
    
    friend BigInt Abs(const BigInt&);
    friend BigInt Factorial(const int);
    friend BigInt GCD(const BigInt&, const BigInt&);
    friend BigInt LCM(const BigInt&, const BigInt&);
    friend BigInt ISqrt(const BigInt&);
    friend BigInt Fibonacci(const int);
};
 
inline BigInt Add(const BigInt& x, const BigInt& y){return x + y;}
inline BigInt Subtract(const BigInt& x, const BigInt& y){return x - y;}
inline BigInt Minus(const BigInt& x){return -x;}
inline BigInt Multiply(const BigInt& x, const BigInt& y){return x * y;}
inline BigInt Divide(const BigInt& x, const BigInt& y){return x / y;}
inline BigInt Remainder(const BigInt& x, const BigInt& y){return x % y;}
inline BigInt Pow(const BigInt& x, const int y){return x ^ y;}
 
inline bool EqualQ(const BigInt& x, const BigInt& y){return x == y;}
inline bool NotEqualQ(const BigInt& x, const BigInt& y){return x != y;}
inline bool GreaterQ(const BigInt& x, const BigInt& y){return x > y;}
inline bool LessQ(const BigInt& x, const BigInt& y){return x < y;}
inline bool GreaterEqualQ(const BigInt& x, const BigInt& y){return x >= y;}
inline bool LessEqualQ(const BigInt& x, const BigInt& y){return x <= y;}
 
BigInt Abs(const BigInt&);
BigInt Factorial(const int);
BigInt GCD(const BigInt&, const BigInt&);
BigInt LCM(const BigInt&, const BigInt&);
BigInt ISqrt(const BigInt&);
BigInt Fibonacci(const int);
И это еще не всё. Скоро добавлю класс BigFrac.
1
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 13:43
Цитата Сообщение от Royal_X Посмотреть сообщение
Теперь просто assert
в релизе это не поможет.
Я бы сделал шаблон, где BigInt будет с проверкой nan, а где будет ложить на него. Ведь кому-то это может понадобиться.
Ладно-ладно, скажешь, опять ненужные навороты Не навязываю.

Цитата Сообщение от Royal_X Посмотреть сообщение
BigInt(const std::string&);
можно ещё перемещающий вариант такого конструктора приделать
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 14:06  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
в релизе это не поможет.
не понял

Добавлено через 1 минуту
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Ведь кому-то это может понадобиться.
Кому понадобится? NAN это мусор. С мусором не работают, это ошибка в вычислениях, сбой программы, назови, как хочешь...
Ни одна система компьютерной алгебры (Mathematica, Maple, Maxima) с ошибочным вводом, мусором не работает.

Добавлено через 4 минуты
Алексей1153, ты ведь когда работаешь с числами в С++, сам же контролируешь, чтобы не делить на ноль и прочее. Ну так же само и с моей библиотекой. За недопустимые операции и за мусорный ввод отвечает пользователь.
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 14:14
Цитата Сообщение от Royal_X Посмотреть сообщение
не понял
что именно?

Цитата Сообщение от Royal_X Посмотреть сообщение
NAN это мусор
это неопределённость

Цитата Сообщение от Royal_X Посмотреть сообщение
ты ведь когда работаешь с числами в С++, сам же контролируешь, чтобы не делить на ноль и прочее.
когда работаю с double - я это не проверяю. Там на ноль прекрасно поделится, получится inf
C++
1
std::cout<<0.1/0.0;
обычно я проверяю результат

и неопределённости тоже без проблем образуются вовсе не из-за входных данных
C++
1
2
    std::cout<< 0.0 / 0.0 <<'\n';
    std::cout<< (0.1/0.0) / (0.1/0.0);
ну, я ж говорю - не хочешь, так и не надо
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 14:21  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
это неопределённость
NAN это not a number, т.е. мусор
Цитата Сообщение от Алексей1153 Посмотреть сообщение
что именно?
почему assert не будет работать в релизе?

Добавлено через 4 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
когда работаю с double - я это не проверяю
равно как и в Mathematica не нужно проверять Sqrt[-1]. Пачуму? Потому что данная СКА работает с комплексными числами.
а моя библиотека с double не работает
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 14:22
про оптимизацию.

Цитата Сообщение от Royal_X Посмотреть сообщение
friend BigInt operator-(const BigInt&);
Чтобы сменить знак ты делаешь копию объекта. Зачем? Можно же просто сменить флажок. Это - обычный метод класса

для "бинарных" функций тоже надо придумать варианты, где первый аргумент не копировался бы, а изменялся "по месту"

Цитата Сообщение от Royal_X Посмотреть сообщение
почему assert не будет работать в релизе?
https://en.cppreference.com/w/cpp/error/assert

то есть, проверка флага тебя не устраивает, а проверку ассертом хотел оставить? Ну, красава
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
09.06.2024, 14:22
Цитата Сообщение от Royal_X Посмотреть сообщение
почему assert не будет работать в релизе?
Потому что он работает, только, если макрос NDEBUG не определен.
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 14:26  [ТС]
Цитата Сообщение от Алексей1153 Посмотреть сообщение
Чтобы сменить знак ты делаешь копию объекта. Зачем? Можно же просто сменить флажок. Это - обычный метод класса
а если этот объект дальше будет использоваться без минуса? Зачем менять сам объект?

Добавлено через 2 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
то есть, проверка флага тебя не устраивает, а проверку ассертом хотел оставить
раньше все математические функции проверяли входные аргументы на nan, теперь такой проверки нет, и assert тоже нет
тратить такты на проверку nan это бред

assert только в конструкторе
0
фрилансер
 Аватар для Алексей1153
6506 / 5755 / 1134
Регистрация: 11.10.2019
Сообщений: 15,404
09.06.2024, 14:26
Royal_X, ну, я и имею в виду, что напрашивается два варианта функций - делающие купию и меняющие по месту
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 14:28  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Потому что он работает, только, если макрос NDEBUG не определен.
могу поменять на exit, не в этом суть

идея в том, что программа прекращается
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
09.06.2024, 14:30
Цитата Сообщение от Royal_X Посмотреть сообщение
идея в том, что программа прекращается
Чтооо ?
Мои два часа вычислений !!! Ааааа !!!
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3072 / 1054
Регистрация: 01.06.2021
Сообщений: 11,802
09.06.2024, 14:33  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
если макрос NDEBUG не определен
я и не собирался его определять. Ну если кто-то умный определит, то ты прав.

Поменяю на std::exit

Добавлено через 2 минуты
Цитата Сообщение от SmallEvil Посмотреть сообщение
Чтооо ?
Мои два часа вычислений !!! Ааааа !!!
Серьезные вычисления делают по кускам и записывают в файл промежуточные результаты.

Открою секрет. Даже в топовом коммерческом софте (Mathematica) можешь несколько часов вычислять и выдаст потом ошибку, причем иногда вообще печально-смешную, например, не хватило немного машинной точности, типа бро увеличь и попробуй еще. Т.е. даже если все было правильно, все данные правильные, но неверно настроил, то потерял время.

Никто не мешает при делениях проверить на ноль в коде. if никто не отменял. Так же само с другими операциями
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
09.06.2024, 14:37
Цитата Сообщение от Royal_X Посмотреть сообщение
Серьезные вычисления делают по кускам и записывают в файл промежуточные результаты.
Всё это совсем неважно.
Твою либу за екзит или что - то подобное сразу выкинут в мусорку.

Добавлено через 36 секунд

Не по теме:

Royal_X, ладно, удачи, буду наблюдать дальше ))

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.06.2024, 14:37

Дан файл целых чисел. Подсчитать сумму чисел, больших числа N
program p1; var fx:text; s,k,n:real; c:integer; begin assign(fx,'C:\Users\Пользователь\Documents\аипас.txt'); reset (fx); ...

В массиве целых чисел подсчитать количество нечётных положительных чисел, больших 50
В массиве целых чисел подсчитать количество нечётных положительных чисел, больших 50. Вывести массив, сами числа и их количество. Если...

Найти сумму целых чисел положительных чисел, больших 20, меньших 100 и кратных 3
Найти сумму целых чисел положительных чисел, больших 20, меньших 100 и кратных 3.

Сравнить функции(рекурсивную и итерационную) по скорости выполнения для больших чисел
Вот мой код вычисления Факториала. а как посчитать время выполнения?Функции timeGetTime и GetTickCount и как их применить? ...

Для последовательности целых, оканчивающейся "8", определить число чисел, больших первого введенного числа
Помогите, пожалуйста, с заданием. Для последовательности целых чисел, оканчивающихся числом 8, определить количество чисел, больших...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru