gpt4 book ai didi

delphi - Writeln 输出扩展数据类型为 float 而不是科学表达式

转载 作者:行者123 更新时间:2023-12-03 18:30:01 25 4
gpt4 key购买 nike

晚安,我在 Embarcadero 10.2 上遇到 writeln 问题,我正在尝试将 sin() 函数编写为泰勒展开式无限系列。

一切都运行良好,但输出在科学表达式中,如:3.60448486921676E-0158,而正确的是 0.912945250727627654376099983845。

我需要 30 位精度。我下面的代码,它是一个控制台程序。

program Project1;

{$APPTYPE CONSOLE}

uses
System.SysUtils,
Windows,
Math;

function fact(n: LongInt): extended;
begin
if (n = 0) then
fact := 1
else
fact := n * fact(n - 1);
end;

var
one:integer;
fin:extended;
number:LongInt;
i:integer;
cons:LongInt;
cons1:extended;
begin
one := -1;
writeln('Digite o angulo em radianos para o Seno: ');
readln(number);
for i := 1 to 120 do
begin
cons := (2*i)+1;
if(i mod 2) = 0 then
one := 1
else
one := -1;
cons1 := fact(cons);
fin := (one/cons1)*(power(number,cons));
cons := 0;
end;
writeln(fin);
readln;

end.

最佳答案

计算 sin(x)泰勒展开仅对小参数稳定,比如小于 Pi/2。对于更大的参数,你会遭受灾难性的取消,因为中间项非常大,例如对于 x=100最大的项是第 49 个具有值 0.107151028812546692318354675952E43 .所有这些大项加在一起,给出一个大小为 <= 1 的 sin() 值。 .您将需要大约 70 位十进制数字,请使用大约 30 位数字计算结果。

解决方案是:使用范围缩减和多精度浮点例程(参见我的开源 Pascal MPArith 包中的 mpf_sin)。使用你得到的交互式计算器

sin(100) = -0.5063656411097587936565576104597854321在 0.2 毫秒内。

关于delphi - Writeln 输出扩展数据类型为 float 而不是科学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53357997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com