Wynik nie mieści się w zmiennych, pewnie dlatego, że używasz zmiennych 8 bitowych.
Pozostawiasz zbyt wiele przypadkowi. Nie definiujesz konkretnych zmiennych o określonej pojemności, lecz piszesz kod jak leci, na skróty, w efekcie kompilator używa domyślnej własnej konwersji, nie tak jak oczekujesz lecz idzie po najmniejszej linii oporu.
Właściwość Text obiektu fneuron[i] oczekuje wartości typu AnsiString, a Twój wzór zwraca wartość liczbową, którą kompilator oczywiście konwertuje na łańcuch znaków, ale robi to po swojemu.
Mieszasz zmienne całkowite ze zmiennymi zmiennopozycyjnymi (ułamki), w efekcie znów kompilatora wykonuje obliczenia jak mu pasuje, raz na zmiennych całkowitych innym razem na ułamkach, sam zaokrągla sobie, nie określiłeś jawnie kolejności wykonywania działań, wiec kompilator najpier wykona to co jest w nawiasach, mnożenie - dzielenie, dodawanie - odejmowanie
Prawidłowy zapis powinien wyglądać tak:
- Kod: Zaznacz cały
double x = fneuron[i]->Text.ToDouble();
long double wynik = 1.0 / (1.0 + pow(M_E, -2.0 * x) ); // używam tylko zmiennych zmiennopozycyjnych
fneuron[i]->Text = (AnsiString)wynik;
funkcja
pow powinna zwracać jako wynik wartość typu double, a nie np. Integer.
To tylko przykład jak to powinno wyglądać, nie wiem co próbujesz osiągnąć, ale przy dużych liczbach nie można polegać tylko na zmiennych typu int, float, double, gdyż mają zbyt małe pojemności na przechowywanie dużych liczb, poszukaj w pomocy do BCB, a zobaczysz jakie bogactwo zmiennych oferuje ten język.