pascal:
//fpc 3.0.0
program HelloWorld;
var x:double;
function fact(n:integer):integer;
begin
if(n = 0) then fact := 1
else fact := n*fact(n-1);
end;
function pows(x:double;y:integer):double;
begin
if(y = 0) then pows := 1
else pows := x*pows(x,y-1);
end;
function func(x:double):double;
var n:integer;
begin
n:= 8;
func := pows(-1,n)*pows(x,2*n+1)/(fact(n)*(2*n+1));
end;
begin
x := func(2);
write(x);
end.
Результат: x = -0.30576
C++
//g++ 5.4.0
#include <iostream>
using namespace std;
int fact (int i){
return (!i)?1:i*fact(i-1);
}
double pows(double x,int y){
return (!y)?1:x*pows(x,y-1);
}
double func(double x){
int n = 8;
return pows(-1,n)*pows(x,2*n+1)/(fact(n)*(2*n+1));
}
int main()
{
double x = func(2);
cout<<x<<endl;
}
Результат: x = 0.191223;
Я конечно понимаю что побочные функции есть в модулях cmath
и math
но не суть важно, ответ совпадает до n = 7
а дальше сами видите. В общем ошибка помоему тривиальна, но если поможете её найти, буду благодарен.
Потому что в С++ int
обычно не меньше 32 бит (вряд ли вы 16 бит найдёте), а в Паскале integer
именно 16 бит. Вместо него следует использовать LongInt
или int64
/QWord
Из-за возникновения переполнения результаты отличаются.
UPD. В паскале это зависит от настроек компилятора, битности компилятора и системы. В С++ примерно так же. 16 бит для паскаля - значение по умолчанию. В С++ обычно на 32 бита можно рассчитывать. Чтобы избегать подобного советую всегда использовать типы с точным размером.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Столкнулся со странными поведением JQ и хрома, а именно, в консоль выдает следующие ошибки:
Есть обработчикbind, обрабатывает от scroll, как выполнять другие функции если: скроллишь вверх, вниз или не скроллишь
пытаюсь добавить передаваемые данные при отправке формы пост собствено вот форма