Ada sin(x) 使用泰勒级数计算

标签 ada trigonometry

我是 Ada 的绝对初学者,我正在尝试使用泰勒级数计算 sin(x) [sin(3) now],但我就是无法让它工作。

这是我的程序:

with Ada.Float_Text_IO;
with Mat;
procedure SinKoz is
    X:Float:=3.0;
    Szamlalo:Float:=0.0;
begin
    for I in 1..100 loop
        Szamlalo := Szamlalo + ((-1.0)**I)*(X**(2.0*I+1.0))/Mat.Faktorialis(2*I+1);
    end loop;
    Ada.Float_Text_IO.Put( Szamlalo );
end SinKoz;

在 Mat 内部,这是我的 Faktorialis,它计算 2*I+1 的阶乘:

function Faktorialis( N: Float ) return Float is
      Fakt : Float := 1.0;
begin
      for I in 1..N loop
         Fakt := Fakt * I;
      end loop;
      return Fakt;
end Faktorialis;

当我尝试编译代码时,出现此错误: 指数必须是 Natural 类型,找到的类型为“Standard.Float”

我希望你能帮助我找出我的类型出了什么问题!

最佳答案

第一个问题是:是否需要将 X 进行非整数次幂?

在我看来,好像您没有:在这种情况下,将 X**(2.0*I+1.0) 替换为 X**(2*I+1) 一切都会好起来的。

但是如果你真的这样做(也许不是在这里,而是在另一个应用程序中),你只需要使这样一个运算符可见:Ada.Numerics.Elementary_Functions 包中有一个用于 Float 的运算符,因此请在你的函数与

with Ada.Numerics.Elementary_Functions;
use Ada.Numerics.Elementary_Functions;

它应该像写的那样工作。 最后,如果您创建了自己的浮点类型,则可以使用您的类型作为其参数来实例化通用包 Ada.Numerics.Generic_Elementary_Functions,以专门为您的类型创建一组这些函数。

关于Ada sin(x) 使用泰勒级数计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15139946/

相关文章:

c++ - 如何解决在 C++ 中 sin(M_PI) 不为 0 的事实?

javascript - 使用反向 Y 轴计算 2 点之间的度数

math - x86上三角指令的误差是多少?

c++ - 努力使用 gdb 调试带有 Ada 库的 C++ 代码

generics - 实例化具有对变体记录的子类型访问权限的包时出现问题

perl - 使用 DynaLoader.pm 在 Perl 中加载 Ada 共享对象

ada - 将整数转换为记录

R:如何产生一个嘈杂的正弦函数

xcode - 如何在 Mac OS X 上获取内存泄漏的行号堆栈跟踪?

algorithm - 逼近反三角函数