gpt4 book ai didi

将 int 转换为 float 会导致不正确的值(虽然不是通常的十进制舍入错误)

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:51 25 4
gpt4 key购买 nike

出于某种原因,在将整数转换为 float (在 Arduino 上使用 c(-ish))时,我得到了一些非常意想不到的结果。
过去,我在 arduino 上遇到过内存问题,所以这可能是一个有用的故障排除提示或红鲱鱼……你选对了。

无论如何,这是我的代码(只有相关部分),给出的值是“6/8”,这应该导致 meterValue = 0.75:

我的功能:

int getIntegerFromFileStream(File f, char* previewedChar) {
int num = 0;
while (48 <= *previewedChar && *previewedChar <= 57) {
// Ascii range 48-57 represents digits 0-9
num = (num*10) + atoi(previewedChar);
*previewedChar = f.read();
}
Serial.print(F("Found integer: "));
Serial.println(num);
}

主要代码:

[.... rest of my code ....]    
// Get the value for the meter from the fractional form (ex: 4/4 or 6/8)
meterValue = (float)getIntegerFromFileStream(file, &inputChar);
Serial.print(F("New meter value: "));
Serial.println(meterValue);
if (inputChar == '/') {
inputChar = file.read(); // move past the '/'
meterValue /= (float)getIntegerFromFileStream(file, &inputChar);
Serial.print(F("New meter value: "));
Serial.println(meterValue);
}
[.... rest of my code ....]

下面是上面代码的输出:

Found integer: 6
New meter value: 3.00
Found integer: 8
New meter value: 1.00
New meter value: 1.00

正如您从输出中看到的那样,整数本身被正确解析,但是一旦它离开函数并被转换为 float ,它的值就会改变(而不是以通常的 float -十进制错误方式)。< br/>任何提示将不胜感激!

编辑:

发现我的新错误:我的 getInt 函数没有返回值,因此导致了未定义的行为。
事实证明,默认情况下,Arduino 在编译期间不会发出警告,除非您专门进入首选项并打开“详细”输出以进行编译。一旦设置好,我就能看到这些警告。(这只是暂时编辑,因为我对 stackoverflow 还太陌生,无法回答我自己的问题,我会在我的时间限制结束后这样做)

最佳答案

发现我的新错误:我的 getInt 函数没有返回值,因此导致了未定义的行为。
事实证明,默认情况下,Arduino 在编译期间不会发出警告,除非您专门进入首选项并打开“详细”输出以进行编译。设置完成后,我就能看到这些类型的警告。

关于将 int 转换为 float 会导致不正确的值(虽然不是通常的十进制舍入错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24216754/

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