Не работает операция вычитание

Операция вычитания через сложение

Доброго времени суток, форумчане!

Помогите с задачей, пожалуйста!

заданы:
1)if — then — else //тут всё понятно
2)рекурсия //тут тоже
3)N-целые числа //тут начинаются непонятки. то ли множество из N чисел задано, то ли просто тип N — целые числа
4)операция сложения: N+N=N //тут тоже непонятно, почему препод написал именно так, а не N=N+N
требуется выразить операцию вычитания через сложение.
Писать на С++

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Сложение числа через классы
Надо сложить два больших числа. #include «iostream» #include «stdio.h» #include «conio.h» using.

Сложение дробей через структуру
Робота с файлами. C++.Пользователь читает файл и меняет его он сохраняеца в другом файле и.

ну и так можно. но зачем тогда рекурсия с условием if-then-else?

Добавлено через 2 часа 21 минуту

), и всё станет понятно.

Найти ошибку в программе нахождения факториала через сложение
Написал программу для нахождения факториала через сложение чисел, но при вводе 3 выдаёт 8, а не 6.

Сложение объектов базового и наследуемых классов через виртуальную функцию
Нужно определить базовый класс с виртуальной функцией сложения. Кроме того перегрузка этой же.

Операция вычитания в процедуре
Ребята, помогите пожалуйста. Никак не могу доработать процедуру. Не понимаю, почему не работает.

Не работает операция вычитания в Strawberry Prolog
Доброго времени суток. Срочно нужно решить проблему. На такой код ?-X=5-2,write(X),nl. .

Источник

проблема с операцией вычитания, проблема с операцией вычитан

ребят, подскажите пожалуйста, что делаю не так, и как исправить

Создаю замкнутый сплайн, при помощи лофт и линии делаю по его очертанию призму
далее при помощи булен присоединяю к нему примитивы цилиндр и бокс, вроде все норм, вот так:
3d-pechat.com/1.jpg — тут фотка

но когда начинаю вычитать из него, при помощи булевого вычитания, другой лофт объект (шуруп созданный так же лофт из 2 стандартных сплайнов-шестигранник и круг , и линии) то после вычитания не остается границы. то есть дырка =(
что нужно сделать что бы такого не было =(((
3d-pechat.com/2.jpg

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

Здравствуйте
Большое спасибо за отклик
«А что Вас на твердотельное моделирование в MAX-е потянуло? »
Занимаюсь прототипированием 3D моделей(печать в пластиковом материале из .stl файлов), потому приходится изучать все вместе и понемногу. Вот начал с макса и архикада. Макс умеет делать .stl в отличие от архикада. Знаю, что макс больше творческая программа и не подходит для точного моделирования. Но решил вот наступить на грабли =) Если не стоит изголяться так, то буду пробовать что-то другое.
автокад еще не пробовал начинать, он вроде тоже умеет. Но уж слишком пугающе он выглядит не говоря уже про какой-нить блендер-этот вообще античеловечен =)

На самом деле, нужно много всего знать, а я в этом деле новичок. Вот и приходится «галопом-по европам» в свободное от работы время заниматься.

Сейчас вот стала задача сделать такую штуку.
Начитался уже, что булен использовать вообще противопоказано. А как тогда сделать что-то подобное

Читайте также:  Почему у меня не работает модем мтс коннект

По поводу пробулен. пробовал.. он тоже косячит. при попытке substraction из первого-второго, он сначала выдает какую-то ошибку, а потом выдает результат объединения моделей =) делаю первую модель editable mesh\poly она вообще исчезает куда-то остаются лишь координаты =) видимо я накосячил где-то на стадии ее создания.

В общем если изучать ее и править долго, посоветуйте как сделать такую штуку проще, без костылей и граблей как у меня =(

сцена в приложении

че то опять у меня не получилось тут вложение сделать.. если есть фак как правильно, почитаю завтра.. сегодня уже голова не варит.

выложил файл себе в домен
3d-pechat.com/detal2.zip

зазипил его, для тех, кто боится вирусов — в архиве только .max файл, архив обычный =)

а то расширение .max браузер пытается открыть самостоятельно, вместо того, что бы закачать, в итоге вылазят кракозябры в окно браузера =)

Autocad превосходно работает с булевыми операциями.
http://pasha-sevkav.ru/uroki/video-uroki/

2012 Autocad в работе с 3D объектами стал ещё лучше.

Rhinoceros- во многом похож на Autocd, но работать в нём одно удовольствие)

Autocad превосходно работает с булевыми операциями.
http://pasha-sevkav.ru/uroki/video-uroki/

2012 Autocad в работе с 3D объектами стал ещё лучше.

Rhinoceros- во многом похож на Autocd, но работать в нём одно удовольствие)

следует =) я ж во втором посте кинул ссылку

«выложил файл себе в домен
3d-pechat.com/detal2.zip «

спасибо, буду штудировать =)

в том то и дело, что нужно уметь ваять и драконов в максе и архитектуру в архикаде и технику в автокаде =) спецом во всем не станешь, конечно, но элементарные вещи нужно уметь делать. Вот и занимаюсь всем понемногу. В идеале, моя задача будет сводиться к тому, что я должен буду уметь из 3D модели любого 3D пакета адаптировать модель под печать, стереолитографию. Потому изучаю все понемногу =) До автокаду обязательно доберусь, только с максом хоть маленько разберусь.

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

Источник

не работает команда ВЫЧИТАНИЕ

06.08.2007, 17:51 #2

06.08.2007, 17:56 #3

06.08.2007, 18:16 #4

06.08.2007, 18:28 #5

06.03.2008, 13:19 #6

Вложения


DWG R14
Чертеж4.dwg (115.3 Кб, 4389 просмотров)

06.03.2008, 13:41 #7

Конструктор по сути (машиностроитель)

Все у меня нормально. Почитай ком. строку тоже. Раз уж решил в этой теме отписываться, не помешало бы почитать повыше. При вычитании после указывания того, из чего вычесть надо жать Энтер, потом указать что вычитаешь и опять Энтер.

А внутри круг — тот вообще ещё не регион.

06.03.2008, 13:47 #8

18.08.2010, 08:44 #9

Просто у Вас не 3D тело, а2D — высылаю Ваш же пример, но с ывчитанием и объединением

Вложения


DWG 2007
Пример_Лист2.dwg (195.5 Кб, 4332 просмотров)

18.08.2010, 09:22 #10

Зато в Справке подробно расписано:

Командная строка: вычитание

Выберите тела и области, из которых будет выполняться вычитание.

«Выберите объекты»: Выбрать объекты любым способом и нажать ENTER по завершении работы

Выберите тела или области для вычитания.

«Выберите объекты»: Выбрать объекты любым способом и нажать ENTER по завершении работы

Объекты второго набора вычитаются из объектов первого набора. Создается новая (единственная) область или тело.

Читайте также:  Как обменять телевизор если он сломался

18.08.2010, 15:12 #11

А нельзя ли проще.

В интерфейсе или на ленте есть кнопки операций (вычитание,объединение,сдвиг и много других), так можно обойтись и без командной строки — это на много проще

Источник

Фатальные ошибки двоичной арифметики при работе с числами с плавающей точкой

Среди всего разнообразия форматов представления действительных чисел в компьютерной технике особое место отведено формату чисел с плавающей точкой (ЧПТ), который запротоколирован в стандарте IEEE754. Главные достоинства чисел с плавающей точкой, как известно, заключаются в том, что они позволяют производить вычисления в большом диапазоне значений и при этом вычисления организуются инструментарием двоичной арифметики, легко реализуемой на вычислительном устройстве. Однако последнее обстоятельство таит в себе подводные камни, которые являются причиной того, что расчеты, сделанные с использованием этого формата, могут приводить к совершенно непредвиденным результатам.

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

В настоящей статье мы не приводим теоретических выкладок, которые объясняют причину появления этих ошибок. Это тема следующего топика. Здесь мы только постараемся привлечь внимание специалистов к проблеме катастрофической неточности вычислений, возникающей при проведении арифметических операций над десятичными числами при использовании двоичной арифметики. Рассматриваемые здесь примеры неумолимо наталкивают на мысль о целесообразности использования формата с плавающей точкой в том виде, как его трактует стандарт IEEE754.

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

Будем рассматривать два основных формата для ЧПТ — float и double. Напомним, что формат float позволяет представлять до 7 верных десятичных цифр в двоичной мантиссе, содержащей 24 разряда. Формат double представляетдо 15 верных десятичных цифр в мантиссе, содержащей 53 двоичных разряда.

Непредставимые в двоичном машинном слове десятичные числа, после приведения их к десятичному виду, содержат как верные цифры так и «хвосты» из неверных цифр. Эти «хвосты» и являются источником ошибочных вычислений десятичных действительных ЧПТ с помощью двоичной арифметики. Покажем это на примерах.

СУММА

Итак, сначала рассмотрим сумму двух следующих действительных чисел, представленных в формате float, каждое из которых имеет по 7 верных значащих цифр:

0,6000006 + 0,03339874=0,6333993 4≈0,6333993

Все вычисления будем проводить в формате float. Для наглядности будем использовать числа в распакованном виде. Представим наши десятичные числа в нормализованном двоичном виде:

0.6000006 ≈ 1.001100110011001101001*2^(-1)
0.03339874≈1.00010001100110100011110*2^(-5)

Если полученные двоичные коды наших чисел опять представить в десятичном виде, то получим следующие значения:

0.6000006 ≈ 0.6000006 198883056640625≈0.6000006 2
0.03339874≈0.03339873 9993572235107421875≈0.0333987 4

Здесь каждое число, округленное до 7 верных цифр мы отделили от «хвоста» пробелом. Эти «хвосты» получились в результате обратной конвертации чисел из двоичного кода, записанного в машинной мантиссе, в десятичный код.
Сумма наших чисел в двоичном 24-х разрядном виде даст следующий результат:

1.001100110011001101001*2^(-1) + 1.00010001100110100011110*2^(-5)≈ 1.0100010001001100111011*2^(-1) ≈0,6333994

Тот же результат будет получен, если просуммировать десятичные числа с «хвостами»:

0,6000006 2+ 0,0333987 4= 0,6333993 6≈ 0,6333994

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

Читайте также:  Thermor полотенцесушитель электрический как настроить

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

Приведем наши десятичные слагаемые к двоичному нормализованному виду:

6543.455=1.10011000111101110100100*2^12=6543.455 078
12.3454810 = 1.10001011000011100010110*2^3 ≈ 12.345 48

Сумма этих слагаемых в двоичном виде даст следующее двоичное число:

Здесь мы снова получили результат, отличающийся от того, который вычислен на калькуляторе для неконвертированных десятичных чисел.

УМНОЖЕНИЕ

Такая же проблема неточных вычислений возникает при нахождении произведения некоторых ЧПТ, представленных в двоичном коде в формате float. Для примера рассмотрим произведение следующих действительных чисел:

Представим в этом выражении сомножители в нормализованном двоичном виде:

Результатом перемножения наших чисел в двоичном виде будет число:

1.00001100000001010001101*2^(-4) × 1.0001011*2^10 = 1001.00011000011011000101 ≈9.095403

Мы получили ошибку в младшем разряде произведения, которую невозможно исправить путем округления числа, представленного в двоичном коде. Такие ошибки принято называть фатальными.

ДЕЛЕНИЕ

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

Представим делимое и делитель в двоичном формате, в нормализованном виде:

13110 = 1.0000011*2^7
0.066= 1.00001110010101100000010*2^(-4)

Частное от деления наших чисел будет следующим:

1.0000011*2^7/1.00001110010101100000010*2^(-4)=
= 1.11110000001101100100111*2^10 = 1984.848 5107421875≈1984.849

Мы видим, что полученный здесь результат не соответствует правильному значению, вычисленному на калькуляторе или вручную.

ВЫЧИТАНИЕ

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

Пусть уменьшаемое у нас будет равно 105.3256. Вычтем из него число 105.32. Разность этих чисел, вычисленная вручную, будет равна:

Представим десятичное уменьшаемое и десятичное вычитаемое в нормализованном двоичном виде:

105.3256 = 1.10100101010011010110101*2^6≈105.3255 997 041015625
105.32= 1.10100101010001111010111*2^6≈105.32

Найдем разность этих чисел в двоичном виде:

После преобразования этого числа в десятичный вид получим:

Мы получили результат, существенно отличающийся от того, который ожидали.

ОШИБКИ В ФОРМАТЕ ДАБЛ

Ситуацию с фатальными ошибками не спасает и формат более высокой точности, например double. Как мы выше уже отмечали, это объясняется самой природой конвертации чисел из одной системы счисления в другую. Покажем это на примерах.

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

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

В ячейке А3Excel получим сумму этих чисел:

Если посчитать эту сумму вручную или на калькуляторе, то получится число:

Которое в младшем разряде не совпадает с тем, что получено в Excel.

Посмотрим, к чему приводит операция вычитания в Excel. Запишем в ячейки следующие числа:

В ячейке А3 найдем разность этих чисел. Она будет равна:

А мы ожидали получить число:

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

А1= 0,500000000660006
А2 = 0,0000213456548763
А3 = 0,00002334565487363
А4 = 0,000013345654873263

В ячейке А6 запишем формулу =A1/5+A2. После чего в ней будет получен результат.

В ячейке A7 произведем следующие вычисления:

А теперь вычислим

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

A1/5=0,500000000660006/5=0,100000000132001 2≈0,100000000132001
A1/5+A2=0,100000000132001+0,0000213456548763≈ 0,100021345786877
( A1/5+A2)/3=0,100021345786877/3≈0,0333404485956257
( A1/5+A2)/3+A3=0,0333404485956257+0,00002334565487363≈ 0,0333637942504993
[( A1/5+A2)/3+A3]/4=0,0333637942504993/4≈0,00834094856262483
[( A1/5+A2)/3+A3]/4+A4=0,00834094856262483+0,000013345654873263=0,00835429421749809

Источник

Оцените статью