Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 16.07.2011 19:08 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Сопроцессор обрабатывает 80-битные числа с плавающей запятой. Не важно, вводишь ты 32-битный float или 64-битный double - это только на входе и выходе. 
Если плагин будет использовать 64-битные double (хотя не вижу в этом смысла), то перед их использованием необходимо будет вызывать _control87(_PC_53, _MCW_PC), а после испоьзования _control87(_PC_24, _MCW_PC). Чтобы геройский код работал по-прежнему. Не при инициализации и деинициализации (attach, detach), а в той же функции, где идёт обработка чисел с плавающей запятой. 
Я, конечно, это не проверял, но так, по-моему, должно быть. 
 
Вообще, рекомендую в плагинах использовать SSE и SSE2, которые поддерживаются с 2000 года всеми процессорами и Виндами не младше 2000 (насчёт Линукса не знаю - их много). Это поможет избежать путаницы, да и в разы проще.
			 
			
			
			
		 |  
	 
 | 
	| 16.07.2011 20:13 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Ну, это понятно, просто вопрос был об использовании double. Вот я и описал, как его использовать ВНУТРИ плагина. Кто его знает, может кто захочет заняться высокоточными астрологическими расчётами =) вместо банальных недель монстров.
			 
			
			
			
		 |  
	 
 | 
	| 16.07.2011 21:18 | 
	
		
	 | 
	
		
		hippocamus 
 
 
		
		
		
			
			
			
 
 
			
Posts: 517 
	
		
	 | 
	
		
			
			 
			
				Без проблем прикручу астрокалендарь. Но ведь это не Земля... Там и планеты другие.
			 
			
			
  
-= подпись Гиппокамуса =-
			
		 |  
	 
 | 
	| 16.07.2011 23:07 | 
	
		
	 | 
	
		
		feanor 
 
 
		
		
		
			
			
			 
			
Posts: 624 
	
		
	 | 
	
		
			
			 
			
				Quote: Вот я и описал, как его использовать ВНУТРИ плагина. 
Внутри плагина обычный сишный/паскалевский код. О том, что там у FPU - пусть у компилятора ядро болит.
			  
			
			
			
		 |  
	 
 | 
	| 17.07.2011 10:17 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Паскалевский код, наверняка, будет такой, что будет только инициализация FPU для работы с double, а деинициализации не будет и весь код Героев не будет работать либо с момента подключения плагина (attach) либо с момента первого вызова функций плагина. Но это надо проверять.
			 
			
			
			
		 |  
	 
 | 
	| 17.07.2011 10:44 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				дык если даже и так, асм вставкой деинициализации в плагине решится проблема.
			 
			
			
			
				
(This post was last modified: 17.07.2011 12:11 by baratorch.)
 
			 
		 |  
	 
 | 
	| 17.07.2011 12:11 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Ну, феанор, например, не собирается делать никаких ассемблерных вставок. 
Я, по-прежнему не думаю, что кому-то понадобится использовать double в своих плагинах. Нужно просто предупредить, что двойную точность использовать не рекомендуется - этого хватит. 
Точнее, двойную точность в FPU. SSE2 и более поздние использовать-то можно. Правда, упоминание об этом может только запутать   
			 
			
			
			
				
(This post was last modified: 17.07.2011 12:18 by etoprostoya.)
 
			 
		 |  
	 
 | 
	| 17.07.2011 12:17 | 
	
		
	 | 
	
		
		hippocamus 
 
 
		
		
		
			
			
			
 
 
			
Posts: 517 
	
		
	 | 
	
		
			
			 
			
				Единственное, где я использовал плавающие числа в ERM - это было определение клеток, попадающих и не попадающих в круг определённого радиуса. 
Другое применение даже придумать трудНО, чтоб это было не за уши притянуто...
			 
			
			
  
-= подпись Гиппокамуса =-
			
		 |  
	 
 | 
	| 17.07.2011 12:36 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 17.07.2011 17:17 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 17.07.2011 17:49 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Вот первый попавшийся пример: 
Code: 
 0061FA1E:   fnstcw   word ptr [esp+34h]; сохраняет предыдущее состояние 
  0061FA22:   mov       eax,dword ptr [esp+34h]; 
  0061FA26:   or          eax,300h; ставит точность 80-бит 
  0061FA2B:   mov       dword ptr [esp+38h],eax; 
  0061FA2F:   fldcw     word ptr [esp+38h]; загружает контрольное слово с новой точностью 
  0061FA33:   fmul       qword ptr ds:[006901ACh]; умножение с высокой точностью 
  0061FA39:   fldcw      word ptr [esp+34h]; загружает предыдущее состояние.
  
А ты говоришь, не меняет контрольное слово) Да там несколько десятков мест, где оно изменяется - но в основном это, похоже, контроль ошибок и округления. 
P.S. Кстати, портировал плагин Семёна в MSVC 2008. Но пока ещё практически не тестил.
			  
			
			
			
				
(This post was last modified: 17.07.2011 18:14 by etoprostoya.)
 
			 
		 |  
	 
 | 
	| 17.07.2011 18:10 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 17.07.2011 18:15 | 
	
		
	 |