Лекция 6 - Домашно - Задача 2
Първоначално задачата не ми направи впечатление, тъй като решението изглеждаше сравнително лесно, но после ударих на камък. За да сметна някакъв триъгълник ми трябват операции с плаваща точка, от рода на корени, тригонометрия и т.н. Ядрото (очаквано) не харесва особено операциите с плаваща точка по ред причини, които не са важни в случая, затова и няма кой знае какви библиотеки за тях, поне аз не можах да намеря, а по форумите като цяло се карат на всеки, който пита за fp аритметика и се чудят за какво му е. Тук се сетих за два варианта да заобиколя въпросния проблем:
Самата floating point аритметика може да бъде пусната за x86 архитектури по следния начин:
#include <asm/i387.h>
int some_function(void){
kernel_fpu_begin();
// Do some calculations or whatever...
kernel_fpu_end();
return 0;
}
Програмата ще използва копроцесора за аритметика с плаваща запетая и ще направи каквото трябва. Между другото, имаше и някакъв друг хедър, който емулираше тази аритметика софтуерно, така че и той остава вариант, както и да е. Това означава, обаче, да си пиша сам функцията за корен квадратен, което не е чак такъв проблем. Тригонометрията вероятно ще е голям зор, ако въобще е възможно да се напише без inline assembly в нея. Отново, леко задънена улица, или поне нещо, което предпочитам да избегна.
Вторият вариант е да използвам inline assembly и по подобен начин на горния да си направя сметките с x87 инструкциите, където има и корен квадратен, и тригонометрия. Назад съм с асемблера, но, като цяло, приемлив вариант. Тук, обаче, също удрям на камък, защото не мога да намеря функция, която ще изпринти floating point стойност в proc файл. seq_printf() отказва упорито.
С това се изчерпва моят опит до момента, споделете и вашия, ако искате, разбира се.
Според мен, за да сметнеш лицето с вектори, пак ти трябва корен квадратен, за което ти трябва плаваща запетая. Обикновено не съм прав за такива работи, така че кажи ако пропускам нещо.
Единственото, което мога да ти кажа, е да се запознаеш с дефиницията на cross product, или векторно произведение, която е добре описана в Интернет. Сравни я с формулата за лице на триъгълник.
Благодаря за отговорите, добре ме насочи. Ще видим докъде ще го докарам