| Berserker   
   
   Posts: 16786
 
 |  | 
	| 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: 16786
 
 |  | 
	| 17.07.2011 17:17 |  | 
	
		| Berserker   
   
   Posts: 16786
 
 |  | 
	| 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: 16786
 
 |  | 
	| 17.07.2011 18:15 |  |