Задать вопрос
  • Как сделать побитовое умножение и сложение большого числа decimal?

    @pinkhead_psd Автор вопроса
    А как так получается, что Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647 Хотя все правильно 2^32=4294967296 и это лонг лонг
  • Как сделать побитовое умножение и сложение большого числа decimal?

    @pinkhead_psd Автор вопроса
    > В том то и дело, что эта структура устроена другим образом:
    Decimal число может быть реализовано в виде четырехэлементного массива 32-разрядных целых чисел со знаком (int bits[4];).
    bits[0], bits[1], и bits[2] содержат младшие, средние и старшие 32 бита 96-разрядного целого числа соответственно.
    bits[3] содержит коэффициент масштабирования и знак, и состоит из следующих частей:

    • Биты от 0 до 15, младшее слово, не используются и должны быть равны нулю.
    • Биты с 16 по 23 должны содержать показатель степени от 0 до 28, который указывает степень 10 для разделения целого числа.
    • Биты с 24 по 30 не используются и должны быть равны нулю.
    • Бит 31 содержит знак; 0 означает положительный, а 1 означает отрицательный.


    Двоичное представление Decimal имеет вид ((от -2^96 до 2^96) / 10^(от 0 до 28)), где -(2^96-1) равно минимальному значению, а 2^96-1 равно максимальному значению.
  • Как сделать побитовое умножение и сложение большого числа decimal?

    @pinkhead_psd Автор вопроса
    да, я сделал доп структуру:
    typedef struct {
      unsigned long long bits[7];
      unsigned int exp;
    } big_decimal;

    Числа пойдут логично с нулевого индекса массива bits. Немного не понял почему у вас число 2 147 483 648 - {0, 1, 0, 0}, а не 2 147 483 648 - {2 147 483 647, 1, 0, 0}
    По поводу кода в ответе. Я загнал в него два таких децимала {{100000,0,0,0}}, в ответе получил да почти также {1410065408, только здесь 0, 0, 0}. Однако я немного не понимаю в чем смысл этого числа (1410065408), если должно получится как вы сказали 10000000000?
    Вот весь код этой ф-ции, за исключением начальных проверок:
    int s21_mul(s21_decimal value_1, s21_decimal value_2, s21_decimal *result)
    {
        s21_decimal a = value_1;
        s21_decimal b = value_2;
        s21_decimal c = {{0}};
        int len1,len2 = 3;
    
        const int BASE = 2147483647; // База системы счисления. Оно же максимальное число в ячейке +1.
        for (int i = 0; i < 3; ++i)
        {
            int carry = 0;
            for (int j = 0; j < 3; ++j)
            {
                carry += c.bits[i + j] + a.bits[i] * b.bits[j];
                c.bits[i + j] = carry % BASE;
                carry /= BASE;
            }
            int i = len1 + len2 - 1;
            while (carry > 0)
            {
                carry += c.bits[i];
                c.bits[i] = carry % BASE;
                carry /= BASE;
                ++i;
            }
        }
    
        int sign = sign_1 ^ sign_2;
        *result = c;
        s21_set_sign(result, sign);
    
        return ret;
    }
  • Как сделать побитовое умножение и сложение большого числа decimal?

    @pinkhead_psd Автор вопроса
    Wataru, да насчет такого странного хранения чисел, я был удивлен и видимо неправильно понял задание. По сути я могу заполнить первый int bits[0] максимум 2 147 483 647, и дальше уже другие числа заносить в следующие мантиссы. Если вас не затруднит, было бы классно посмотреть как вы полностью сделали такую ф-цию по мимо цикла, потому что пока что не могу вне контекста понять... (неважно умножения, сложения и т.д.) Я надеюсь посмотрев код, я пойму правильно ли я понимал как вообще работает decimal))

    P.S. Для точности, еще раз в кратце условия опишу. Число decimal представляет из себя 3 мантиссы unsigned int с куском или полной частью числа как мы уже выяснили. 4 bits хранит в себе также число это экспонента, ну все это надо я так понимаю для представления числа и на арифметику не должно как то влиять, за исключением нормализации когда экспоненты разные и мы хотим их сложить или вычесть.
    P.P.S. Тип Decimal представляет десятичные числа в диапазоне от положительных 79,228,162,514,264,337,593,543,950,335 до отрицательных 79,228,162,514,264,337,593,543,950,335 и как выглядит сама структура:

    typedef struct {
      unsigned int bits[4];
    } decimal;
  • Как сделать побитовое умножение и сложение большого числа decimal?

    @pinkhead_psd Автор вопроса
    Возможно, я не очень вас понял. Но для чего мы вводим len1 и len2, если всегда нужно проходится до 3 индекса в нашей структуре, 3 индекс это экспонента, а bits[0,1,2] это как раз мантиссы, которые вмещают в себя один int. Если первый bits[0] уже заполнен под завязку, то мы просто заполняем дальше bits[1]. И как раз основная проблема в том, что я могу получить просто первые мантиссы из чисел (структур) и их умножить, но получается, что число в результирующем массиве это умноженные числа друг на друга, а не полноценное число.

    Допустим, я умножаю число decimal a = {{444,4,0,0}} на decimal b = {{22,2,0,0}} по логике должно получится decimal res = {{98656,8,0,0}}, так как 4444 * 222 = 986 568. Однако результат получится decimal res = {{9768,8,0,0}}, то есть 97 688
  • Как написать функцию sin из библиотеки math.h в Си?

    @pinkhead_psd Автор вопроса
    оригинал выдает значение в радианах
    #include <stdio.h>
    #include <math.h>
    
    int main(){
        printf("Оригинальная sin чистый вывод: %f\n",sin(30.0));
        return 0;
    }

    ВЫВОД:
    Оригинальная sin чистый вывод: -0.988032
    И я пытаюсь написать ее с нуля из либы math.h
  • Как написать функцию sin из библиотеки math.h в Си?

    @pinkhead_psd Автор вопроса
    Да, но мне нужно получить результат, если 30.0 градусов, то -0.988032 радиан, а я получаю как раз 0.500000
  • Как написать функцию sin из библиотеки math.h в Си?

    @pinkhead_psd Автор вопроса
    Хотите сказать нужно увеличить кол-во иттераций в цикле?
    Тут не то чтобы неточность, я получаю значение в градусах а нужно в радианах, еще раз продублирую вывод
    1. вывод моей ф-ции
    2. оригинал
    3. оригинал и я его умножил на PI/180
    Синус угла 30.00 радиан равен 0.500000
    Оригинальная sin чистый вывод: -0.988032
    Оригинальная sin с переводом в градусы: 0.500000
  • Как написать функцию sin из библиотеки math.h в Си?

    @pinkhead_psd Автор вопроса
    А если я передам в свою также 30.0, то получаю бешеное число, так как радиан то всего ~6.28 по сути:
    Синус угла 30.00 радиан равен 50099815.714286
    Оригинальная sin чистый вывод: -0.988032

    Я так понимаю оригинальная ф-ция получает на ввод градусы, переводит их в радианы и затем уже считает?
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    видимо у меня есть пробелы... разве SSR делается не на стороне сервера? Server Side Rendering. Я просто так до конца и не понял, что он делает на фронте. Надо просто попробовать, чем 10 спросить
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    Так Next разве не делится на фронт и бек? Если бы вы делали фулстак приложение на React какой стек выбрали бы?

    П.С. про ноду я лоханулся, пробовал писать на ней, но даже в суть вопроса не въезжал видимо
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    Но я так понимаю, что нода в основном идет фулстаком. Я мало видел вакансий на чистый Node js
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    Спасибо! В итоге для себя я вынес, что проще не заморачиваться и сделать приложение на экспрессе, тем более я уже его тыкал. Понадобится Next, его не так долго осваивать. Я думаю это все просто будет плюсом в вакансии, точно уж не главным требованием
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    Это прямо тру бекенд. Я занимаюсь фронтом, просто нужна технология, которая поможет написать фулстак приложение, а учить ради этого еще один язык, пока что сомнительная идея как по мне. Насчет ноды не знаю, слышал схожее мнение и про GO
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    Хах, понял вас)) Next фреймворк для Node js, как бы. По факту фреймворк для JS, но используется в ноде. Правильно понимаю? То есть правильнее было бы задать вопрос допустим, что лучше выбрать Express или Next js?
  • Что лучше учить в связке с React для бекенда?

    @pinkhead_psd Автор вопроса
    Понимаю, что node это среда для работы JS на сервере, а next фреймворк. Но на практике мне это ничего не дает, чтобы понять, что больше пригодится. Оба же могут использоваться для создания серверной части в приложении. Казалось бы node js должен быть более функциональным - бери и учи, сделаешь все что угодно. Однако в вакансиях часто next вижу, вот и задался этим вопросом
  • Ошибка при установке selenium?

    @pinkhead_psd Автор вопроса
    Проблема решена, и заключалась в том, что selenium не поддерживает python 3.10
    Как вариант поставить версию 3.9 и ниже, либо воспользоваться бета версией selenium - python -m pip install selenium==3.141.0
  • Ошибка при установке selenium?

    @pinkhead_psd Автор вопроса
    Модератор, хорошо, про трейсбек не знал
  • Ошибка при установке selenium?

    @pinkhead_psd Автор вопроса
    Первая команда отработала как надо, но urllib3 также выдает ошибку(
  • Как записать значение в localStorage не обновляя его хуком useState?

    @pinkhead_psd Автор вопроса
    Спасибо! Есть парочка недочетов, но суть ясна
    Рабочий код:
    import React, { useEffect, useState } from 'react';
    import logo from './logo.svg';
    import './App.css';
    
    function App() {
    
      const [count,setCount] = useState(() => {
        const count:number = JSON.parse(localStorage.getItem('count') || '');
        return Number.isInteger(count) ? count : 0;
      });
    
      const inc = () => {
        setCount(prev => prev+1)
      }
    
      const dec = () => {
        setCount(prev => prev-1)
      }
    
      useEffect(() => {
        localStorage.setItem('count',JSON.stringify(count))
      },[count])
      
      return (
        <div className="App">
          <h1>Count: {count}</h1>
          <button onClick={inc}>+</button>
          <button onClick={dec}>-</button>
        </div>
      );
    }
    
    export default App;