gpt4 book ai didi

delphi - 如何处理浮点溢出?

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

我正在尝试使用 HAAR 公式过滤 .wav 样本数据值,但出现错误“浮点溢出”

编辑:添加更多代码

numsamples := round(wavehdr.SampleRate);
SetLength(wavedata[0].Data, numsamples);
Stream.Read(wavedata[0].Data[0], numsamples);
SetLength(cA1, numsamples);
SetLength(cD1, numsamples);
for i:=1 to numsamples-1 do begin
cA1[i]:=(wavedata[0].Data[(i*2)-1]*0.7071) + (wavedata[0].Data[(i*2)]*0.7071);
cD1[i]:=(wavedata[0].Data[(i*2)-1]*0.7071) + (wavedata[0].Data[(i*2)]*-0.7071);
end;

其中 wavedata[0].Data[i],我从函数 Stream.Read 中获取它以加载 .wav 文件的样本数据值。我不知道为什么我收到错误或错误意味着什么,我一直在搜索主要由零除引起的错误,但我的代码中没有除零。所以也许我可以在这里提供一些帮助,我的代码中的错误是什么意思?

编辑1:(我对delphi真的很陌生,这段代码不是我的,我是在网上找到的。据我了解,以下代码是读取.wav文件示例数据值的代码)
type
TWaveHeader = packed record

Marker_RIFF: array [0..3] of char;
ChunkSize: cardinal;


Marker_WAVE: array [0..3] of char;


Marker_fmt: array [0..3] of char;
SubChunkSize: cardinal;


FormatTag: word;

{ nChannels : 1 mono, 2 stereo }
NumChannels: word;
SampleRate: longint;
BytesPerSecond: longint;
BytesPerSample: word;
BitsPerSample: word;


Marker_data: array [0..3] of char;


DataBytes: longint;
end;

TChannel = record

Data : array of double;
end;

和一个私有(private)声明:
private
wavehdr:TWaveHeader;

功能 :
FillChar(wavehdr, sizeof(wavehdr),0);
Stream.Read(wavehdr,sizeof(wavehdr));

我在读取示例数据时修改了一些代码以处理空值:
 if(IsNan(wavedata[0].Data[(i*2)-1])) then begin
wavedata[0].Data[(i*2)-1]:=0;
end
else if(IsNan(wavedata[0].Data[(i*2)])) then begin
wavedata[0].Data[(i*2)]:=0;
end;

最佳答案

对于 i:=0 ...
(wavedata[0].Data[(i*2)-1]
你真的有数组元素Data[-1] ?

附言调试时设置范围检查编译器选项。

编辑:我看到了一些新代码,所以让我们开始第 2 步:

SetLength(wavedata[0].Data, **numsamples**);

for i:=1 to **numsamples**-1

wavedata[0].Data[(**i*2)**]

我们必须彻底检查每一行代码吗?

关于delphi - 如何处理浮点溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16183828/

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