2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1, 2
 
 Re: Округление вещественного числа, деление без остатка
Сообщение30.08.2011, 14:32 
worm2 в сообщении #478946 писал(а):
Наиболее правильное решение задачи 1 — использование десятичной арифметики.

Т.е. арифметики с фиксированной точкой. Угу. И как мы с помощью этой арифметики будем писать процедуру, скажем, округления числа $\sqrt2$ до нужного количества знаков?...

Вообще-то вопрос об округлениях довольно неоднозначен. Например, вполне практическая задача: найти решение (рациональное) системы линейных уравнений с целыми коэффициентами. Есть два напрашивающихся варианта:

1. Реализовать рациональную арифметику.
2. Считать всё в вещественных числах и потом округлять результаты цепными дробями.

Второе -- технически проще.

 
 
 
 Re: Округление вещественного числа, деление без остатка
Сообщение30.08.2011, 15:02 
worm2 в сообщении #478946 писал(а):
В некоторых банковских приложениях так делают, чтобы обеспечить нормативные правила округления.

Именно так. В финансовых приложения весьма распространен формат когда цена кодируется целым числом и вторым числом, обозначающим позицию десятичной точки.

 
 
 
 Re: Округление вещественного числа, деление без остатка
Сообщение30.08.2011, 19:20 
Аватара пользователя
ewert писал(а):
Т.е. арифметики с фиксированной точкой. Угу. И как мы с помощью этой арифметики будем писать процедуру, скажем, округления числа $\sqrt2$ до нужного количества знаков?...
Не обязательно с фиксированной. Можно и с плавающей организовать, и с мантиссой переменной длины. Главное — в десятичной системе считать. А алгоритмы те же, что и для обычной, двоичной арифметики.

Правда, для математических или физических задач проще и быстрее производить вычисления в двоичном виде, а потом приводить к десятичному. Но как быть, когда нам предписывают производить вычисления в строго определённом порядке: это умножить на это, округлить до такого-то числа знаков, разделить на то, опять округлить, возвести в двенадцатую степень и снова округлить?.. Тут выгоднее тупо имитировать процесс вычислений на бумажке "столбиком".

 
 
 
 Re: Округление вещественного числа, деление без остатка
Сообщение30.08.2011, 21:31 

(Оффтоп)

worm2 в сообщении #479033 писал(а):
Тут выгоднее тупо имитировать процесс вычислений на бумажке "столбиком".

Я ровно так и делал, когда уже довольно много лет назад (не помню точно, сколько) писал программу, которая решает линейные неоднородные дифференциальные уравнения со стандартной правой частью и с целыми коэффициентами методом неопределённых коэффициентов. Причём решая именно тупо: формально дифференцируя предполагаемое частное решение, формально всё складывая и потом решая получившуюся СЛАУ. Выводя при этом исходное условие, ключевые моменты решения и ответ в ТеХ-овский файл.

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

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

 
 
 
 Re: Округление вещественного числа, деление без остатка
Сообщение22.09.2011, 22:04 
usr00210 в сообщении #477843 писал(а):
Подскажите пожалуйста алгоритмы:

1. Округление (правильное) произвольного вещественного числа до заданной точности/разряда.
2. Проверка произвольного вещественного числа на кратность любому другому вещественному числу.

Спасибо!


1. а) гугл
б) преобразовываешь в строку, делаешь поиск до запятой, делаешь проверку какую-нить на число до и после запятой, потом делаешь что тебе надо и печатаешь новое число потом опять преобразование в вещественный тип и вуаля

2.4324234 = 2 или 2,4 ты хочешь?

2. посмотри как работает оператор % в с++

 
 
 [ Сообщений: 20 ]  На страницу Пред.  1, 2


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group