Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 29.06.2018, 19:44   #21
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 17,675
Репутация: 6211
По умолчанию

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

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

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

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

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

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

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

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

icq: 100500
skype: kick-ass
По умолчанию

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

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

Последний раз редактировалось min@y™; 30.06.2018 в 19:17.
min@y™ вне форума   Ответить с цитированием
Старый 30.06.2018, 19:24   #26
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,539
Репутация: 1916

icq: 216409213
По умолчанию

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

Цитата:
Сообщение от Аватар Посмотреть сообщение
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, 19:36   #28
Novy
Пользователь
 
Регистрация: 28.06.2018
Адрес: Проживаю дома, на кресле
Сообщений: 35
Репутация: 10
По умолчанию

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

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

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

очень внимательно читай сюда.
Да, это я сказал. И? Кстати, рассказ интересный и жизненный, но он ни к чему тут. Я же не тот Новичок.. И вообще, ближе к делу будем. Мой выбор пал на setprecision (в плане сокращения чисел), но он почему-то не срабатывает нормально в отладчике.. Писал
Код:

 cout << setprecision(5) << nmb << endl).

(например, если число равно 1.4567890 - выводило в отладчике число длиннее, чем само число есть. Может, не нужно мне акцентировать внимание на отладчикиных значениях или есть повод хвататься за голову в этом случае?
Novy вне форума   Ответить с цитированием
Старый 30.06.2018, 20:53   #30
min@y™
Цифровой кот
Профессионал
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Адрес: 1600, пенсильвания-авеню, п.г.т. верхний Вашингтонск, 8126 км от МКАД, от поста ГАИ - налево.
Сообщений: 7,637
Репутация: 2356

icq: 100500
skype: kick-ass
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертация single float в double float kypck Assembler 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 16:14


13:48.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru