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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2012, 23:54   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Reskov, да, действительно ffGeneral выводит красиво, но проблема со 180 градусами остается (при a=180 выводит -5,4E-20).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.05.2012, 23:58   #12
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот Вы проблему придумали!

я, вот честно, не понимаю, чем не устраивает округление до 17-18 знаков после запятой!

или банальное:
Код:
 if abs(x)<1e-18 then x:=0;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2012, 00:07   #13
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Serge_Bliznykov, магия какая-то)
До вашего поста писал в коде abs(sin(...))<0.00001 then... - не работало, а сейчас работает.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 02.05.2012, 00:08   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

BDA, видимо, меня компилятор Delphi уже боится!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2012, 18:23   #15
nEm1z1s
 
Регистрация: 01.05.2012
Сообщений: 5
По умолчанию

Наконец то у меня дошли руки до этих функций. И я опять начал думать, как сделать так, чтобы был чистый 0.
Но как то в голову нечего не лезло и я решил попробовать способ, который предложил DBA. Но безуспешно, почему-то программа не понимала функцию trunczero. Может для неё нужно дополнительные библиотеки подключать?!
После провала, я начал дальше думать . И тут я вспомнил про функцию pos( ). Я щас попробую поподробнее описать свои действия, вдруг кому-нибудь понадобиться.

Так вот, у меня на форуме три объекта: кнопка (SpeedButton; я думаю, что тут можно и другие кнопки выставить) и два поля для ввода и вывода (Edit). Edit1 (вводим число), Edit2(ответ). Сам код, который я записал в кнопке:
Код:
procedure TCalc.SpeedButton1Click(Sender: TObject);
begin
if Edit1.Text='' then Edit2.Text:='Надо вписать число'
else begin
  if pos(',', Edit1.Text)=0 then begin
  if strtoint(Edit1.Text) mod 180=0 then  Edit2.Text:='0'
  else Edit2.Text:=floattostr(sin(degtorad(strtofloat(Edit1.Text))));
  end
  else Edit2.Text:=floattostr(sin(degtorad(strtofloat(Edit1.Text))));
end;
end;
Вообщем как-то так. При проверки вроде ничего критичного не было и вычисления делает правильно.
nEm1z1s вне форума Ответить с цитированием
Старый 08.05.2012, 18:31   #16
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

nEm1z1s, попробуйте так (из поста Serge_Bliznykov):
Код:
z:=sin(degtorad(a));
if abs(z)<1e-18 then 
	memo1.lines.append('0')
else
	memo1.lines.append(floattostrf(z),ffGeneral,1, 7));
Странно, что функция не работает.
Ей требуются только стандартные библиотеки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 08.05.2012, 18:51   #17
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от nEm1z1s Посмотреть сообщение
Наконец то у меня дошли руки до этих функций. И я опять начал думать, как сделать так, чтобы был чистый 0.
Это неверная тактика.
Вычисления с плавающей точкой в самой своей основе приближенные, поэтому пытаться получить "чистый 0" методологически неверно.
И потом - просто не нужно.
s-andriano вне форума Ответить с цитированием
Старый 08.05.2012, 22:42   #18
nEm1z1s
 
Регистрация: 01.05.2012
Сообщений: 5
По умолчанию

аааа... всё... понял, почему у меня не работала функция trunczero. Перед тем как её использовать надо код к ней было написать. Спасибо BDA, Ваш (так скажем) способ НАМНОГО лучше моего !

PS. Спасибо всем за помощь!
nEm1z1s вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
sin ,cos,ln,lg,exp,sqr и др. wanes101 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 22.10.2014 04:24
Пусть задано значение X. Найти первое из чисел sin X, sin sin X, sin sin sin X, ... , меньшее по модулю 10-4. hex_91 Visual C++ 1 28.04.2012 23:49
Паскаль Вычислить у - первое из чисел sin х, sin sin x, sin sin sin x, ..., меньшее по модулю 10-4 Kikikiss Помощь студентам 2 25.03.2012 13:58
Cos, Sin и непонятности с ними =\\ Zeraim Общие вопросы Delphi 3 25.07.2009 01:38