![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Вопрос в следующем. 
		
	
		
		
		
		
		
		
			Для вычисления синусов, косинусов используются стандартные функции Sin Cos. В качестве аргумента они принимают значение угла в радианах. Как вычислить тригонометрию в градусах? Есть формула перевода Рад = град * Pi/180 Есть даже функция в библиотеке Math DegToRad Все бы хорошо. Но вопрос в следующем. После математического перевода появляется естественная ошибка точности и, например, Sin (360 градусов) равен -2,44921270764475E-16. Кто-то скажет, что это "почти" ноль. Но ведь не ноль! В стандартном калькуляторе Windows выдает чистый ноль (как для синуса так и для косинуса (90)). Вопрос. Как сделать корректный калькулятор аля Windows при просчете тригонометрических функций? (не подкрученый специально для нуля, а именно корректный) Кто-то пытался? Последний раз редактировалось Taras, 04.10.2013 в 01:53.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 RoundTo не спасет? 
		
	
		
		
		
		
		
	
		
		
	
	
	Просто "сбрось" немного точность. Что-то типа такого: Код: 
	procedure TForm1.Button1Click(Sender: TObject);
var
  Grad : Double;
begin
  If TryStrToFloat(Edit1.Text,Grad)
    Then Edit2.Text := FloatToStr(RoundTo(Sin(Grad*PI/180),-8))
    Else ShowMessage('Can''t convert string to number.');
end; | 
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
 
Taras (04.10.2013)
  | ||
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо. 
		
	
		
		
		
		
		
	
		
		
	
	
	Красивое и правильное решение. Не перевелись светлые головы в нашей деревне. ![]()  |