Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2018, 18:44   #21
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

0.1 (10) = 0.0(0011) (2) - бесконечная периодичная двоичная дробь

оставим в ней допустим 10 знаков после десятичной точки и получим:
0.0001100110 (2) = 51/512 (10) ~ 0.099609375 (10)

Сколько знаков после точки у исходного 0.1 после преобразования в двоичное с округлением и обратное преобразование? И не важно, что 10 знаков, могли бы и 100 оставить, все равно пришлось бы округлять. Примерно то же самое и в компе происходит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 29.06.2018 в 18:47.
Аватар вне форума Ответить с цитированием
Старый 29.06.2018, 20:19   #22
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,503
По умолчанию

Цитата:
Сообщение от Novy Посмотреть сообщение
Сами вы упёртые (без обид, не люблю оскорблять, но меры уже крайние) поймите: я СО СТРОКОЙ РАБОТАТЬ НЕ УМЕЮ!!!
Зато я умею! Вот только мне это редко надо!
Запомни: раньше был массив символов. И это была строка. Она заканчивалась нулём, что означало: конец строки.
С приходом "Visual C" появился класс CString, который включал в себя строку, возможность изменять её длину и ещё методы для работы со строками. Всё в одном. Если ты не знаешь, что такое классы - учи.
А вот как я это использовал:
http://programmersforum.ru/showthread.php?t=277390
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Старый 29.06.2018, 22:23   #23
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

Судя по вопросу, до классов ТСу еще далеко. Строки были всегда, даже в древнем "бесклассовом" С от Борланда.
А если строки для человека - terra incognita, то разобраться с ними можно по очень простому алгоритму:
1. Открываем учебник - неважно, сетевой или бумажный, ищем там про строки и строковые функции, вот первое, что подвернулось:
http://cppstudio.com/post/9567/
https://studfiles.net/preview/5772717/ - там пара - тройка страниц.
2. Пробуем поработать со строками
3. Если не получилось - спрашиваем у форума - почему - и goto 1.
4. Разобравшись в этом нехитром деле, легко решаем свою задачу.
5. Говорим форумцам СенькаЮ и идем пить пиво.
Возможен более простой алгоритм:
Говорим "я ваши строки в гробе видал, а вы, форумляне - козлы!" - и идем пить пиво и переводиться в мукомольный.

Последний раз редактировалось digitalis; 29.06.2018 в 22:26.
digitalis вне форума Ответить с цитированием
Старый 30.06.2018, 18:05   #24
Novy
Пользователь
 
Регистрация: 28.06.2018
Сообщений: 38
По умолчанию

Цитата:
Сообщение от 2Lui Посмотреть сообщение
Я не пойму зачем зацикливаться на одной задаче, ну не можешь ты сам сделать, ну так иди дальше, делай другие задачи, когда будешь понимать алгоритм как эту сделать(хотя бы в голове прокрутить), тогда и делай, а если у тебя есть молоток и гвозди ты дом не построишь! Так и в программирование есть такие задачи что без определенных знаний того ты не решишь задачу!.
Ну.. Прокручивать я прокручивал, но не крутится. Просто это важно для задачи сокращения дроби, которая в свою очередь нужна, что-бы сделать основную задачу, которая заключается в том, что-бы сложить две дроби. Как-то так.
Цитата:
Сообщение от min@y™ Посмотреть сообщение
оправдание своим невежеством недостойно человека интеллектуального труда
Верёвкин, вы мне уже надоели тем, что обзываете меня невежественным за незнанием вещей и тем, что мне нужно выиграть время. Мне нужно уже курсовую работу писать, а такие домашние задания (у нас так эти задания называются в академии) я делать не в силах, потому - что я просто не успеваю это всё прокрутить в своих мозгах: уж слишком вы конечно-же вежливые. Либо я тупой (самооценка у меня на высоте, знаю), либо это у меня из неопытности.
Novy вне форума Ответить с цитированием
Старый 30.06.2018, 18:13   #25
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Novy Посмотреть сообщение
Либо я тупой
Я этого не говорил. Это ты сказал!

000061.jpg
-------
А на счёт этого:
Цитата:
Сообщение от Novy Посмотреть сообщение
важно для задачи сокращения дроби, которая в свою очередь нужна, что-бы сделать основную задачу, которая заключается в том, что-бы сложить две дроби
очень внимательно читай сюда.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 30.06.2018 в 18:17.
min@y™ вне форума Ответить с цитированием
Старый 30.06.2018, 18:24   #26
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Novy Посмотреть сообщение
Просто это важно для задачи сокращения дроби, которая в свою очередь нужна, что-бы сделать основную задачу, которая заключается в том, что-бы сложить две дроби.
Если зачем в сложении дробей сокращать дроби я еше могу представить, то зачем в этой задаче считать кол-во цифр после запятой...
p51x вне форума Ответить с цитированием
Старый 30.06.2018, 18:34   #27
Novy
Пользователь
 
Регистрация: 28.06.2018
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
0.1 (10) = 0.0(0011) (2) - бесконечная периодичная двоичная дробь

оставим в ней допустим 10 знаков после десятичной точки и получим:
0.0001100110 (2) = 51/512 (10) ~ 0.099609375 (10)

Сколько знаков после точки у исходного 0.1 после преобразования в двоичное с округлением и обратное преобразование? И не важно, что 10 знаков, могли бы и 100 оставить, все равно пришлось бы округлять. Примерно то же самое и в компе происходит
setprecision пробовал ставить - не вышло. Видел ещё запись типа nmb / 1e14, где nmb - число, которое мы вводим, но я так и не врубился, что это такое.. Сказал пользователь, который, собственно, в своём примере это и писал, что это минимальная точность. Прошёлся отладчиком - вообще запутался из-за того, что происходит с числом и почему запись типа 1.56778345547 (число не точное, примерное, но такой длины было это число примерно в отладчике) позволяло считать, что это число (вводилось юзером 1.56, например) имеет 2 числа после запятой... Каким образом - не понятно. Кстати, вот сама программа:
Код:
#include <iostream>
using namespace std;
int main()
{
    double nmb, e; // nmb - число, e - минимальная точность числа
    int floating_points_amount = 0;
    cout << "Enter number: ";
    cin >> nmb;
 
    nmb = abs(nmb); // Необходимо чтобы работало с отрицательными числами
    nmb = nmb - (int)nmb;
    e = nmb / 1e14; // по вики - double хранит 15-17 знаков. Возьмём минимальную точность на один знак меньше
 
    while (nmb > e)
    {
        nmb *= 10;
        e *= 10; // увеличиваем минимальную точность, так как увеличилось и число
        floating_points_amount++;
 
        // Две проверки, на случай если появились лишние знаки
        // Эта на случай перехода 0.1 => 0.09...99
        if ((nmb + e) - (int)(nmb + e) < e)
            nmb = 0;
        // Эта на случай перехода 0.1 => 0.10...01
        if ((nmb - e) - (int)(nmb - e) < e)
            nmb = 0;
 
        nmb -= (int)nmb;
    }
 
    cout << "Digits after point: " << floating_points_amount << endl;
 
    system("pause");
    return 0;
}
И про существование периодических дробей я знаю, но не понимаю к чему это..
Novy вне форума Ответить с цитированием
Старый 30.06.2018, 18:36   #28
Novy
Пользователь
 
Регистрация: 28.06.2018
Сообщений: 38
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Если зачем в сложении дробей сокращать дроби я еше могу представить, то зачем в этой задаче считать кол-во цифр после запятой...
Для интереса, что-бы я знал, как работать с такими вещами.
Novy вне форума Ответить с цитированием
Старый 30.06.2018, 18:50   #29
Novy
Пользователь
 
Регистрация: 28.06.2018
Сообщений: 38
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Я этого не говорил. Это ты сказал!

Вложение 93599
-------
А на счёт этого:

очень внимательно читай сюда.
Да, это я сказал. И? Кстати, рассказ интересный и жизненный, но он ни к чему тут. Я же не тот Новичок.. И вообще, ближе к делу будем. Мой выбор пал на setprecision (в плане сокращения чисел), но он почему-то не срабатывает нормально в отладчике.. Писал
Код:
 cout << setprecision(5) << nmb << endl).
(например, если число равно 1.4567890 - выводило в отладчике число длиннее, чем само число есть. Может, не нужно мне акцентировать внимание на отладчикиных значениях или есть повод хвататься за голову в этом случае?
Novy вне форума Ответить с цитированием
Старый 30.06.2018, 19:53   #30
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Novy Посмотреть сообщение
Может, не нужно мне акцентировать внимание на отладчикиных значениях или есть повод хвататься за голову в этом случае?
Иди ты в жопу. Вдруг это заразно и передаётся через интернет...
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертация single float в double float kypck Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 23.04.2012 00:22
Float и Double crawter C# (си шарп) 1 19.03.2012 15:46
Ошибка типа cannot convert `float*' to `float' for argument `1' ... Trackman Помощь студентам 3 23.05.2011 17:09
Отображение значений переменных типа float и double(Языки Pascal и C) Сырно Помощь студентам 3 17.10.2010 18:37
float или double? zgest Общие вопросы C/C++ 10 20.03.2010 15:14