问题标签 [strtod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
66 浏览

c - How to convert strtod's 'P' binary exponent notation to decimal?

I knew about the standard 'e' exponent for decimal notation, but the linux man page of strtod says about the hexadecimal notation:

A hexadecimal number consists of a "0x" or "0X" followed by a nonempty sequence of hexadecimal digits possibly containing a radix character, optionally followed by a binary exponent. A binary exponent consists of a 'P' or 'p', followed by an optional plus or minus sign, followed by a nonempty sequence of decimal digits, and indicates multiplication by a power of 2. At least one of radix character and binary exponent must be present.

Playing with a C compiler: 0x0123456789ABCDEFp019 is equal to 4.2984030182685396e+22 but I cannot reimplement that successfully myself.

0 投票
2 回答
220 浏览

c++ - C++:strod() 和 atof() 没有按预期返回 double

我正在尝试使用从 .txt 文件中获得的值将字符串转换为双精度值。

我得到的双打没有小数。我相信这是因为,在 .txt 中,数字的小数点用逗号而不是点分隔。但我不知道如何解决。

这是我的代码的简化:

这些是文件的三行:

这些是使用上述代码输出的那些行:(提醒,I std::cout time (string), u10st (string), u10 (double), u40 (double))。

关于如何将 4,25636 字符串读入双 4.25636 的任何想法?文件太长,无法修改。

0 投票
0 回答
23 浏览

c++ - convert string to double 结果与strtod不一致

我实现了一个函数StringToDouble将字符串转换为double,但是当我用相同的字符串测试我的函数和标准strtod函数时,结果不同,我不知道为什么会发生这种情况,是不是用double做算术时精度有问题?以及如何修复我的函数,使其生成与 strtod 相同的结果?谢谢。这是我实现的 StringToDouble

这是我用于测试的代码

输出是

我还测试了其他字符串,有些用strtod得到相同的结果,有些不是,所有带指数的情况都得到不同的结果。

0 投票
2 回答
76 浏览

arrays - 如何将存储为字符串中字符的十进制数字转换为双精度数?

编程新手,我正在循环一个后缀字符串并尝试单独检索数字,我一次只需要一个。

最初我为整数编写了这个并且只是做了“-'0'”,但是,我现在需要尝试使它与十进制数兼容。

下面是我的整数转换示例,我该如何调整?

例如如何评估何时

将值存储为双精度

0 投票
2 回答
349 浏览

c - 为什么 Newlib C 标准库实现的 strtod() 和 strtof() 使用动态内存分配?

Newlib 是一个用于嵌入式系统的 C 标准库实现(很大程度上受 BSD libc 的启发)。

显然,字符串到浮点的转换函数 ( strtod, strtof) 通过调用一个名为 的函数来使用动态内存分配,该函数Balloc调用_calloc_rwhich 调用_malloc_r

为什么?

我试图查看在线可用的源代码,但我无法理解它。

我在反汇编中找到了对的调用,_Balloc并尝试了许多不同的输入(字符串)来尝试触发它被调用,但我没有设法调用它。(我无法在 C 源代码中跟踪程序,因为该库是经过大量优化的预编译(共享库)。)

我需要使用一个充满调用strtod和其他功能的库,所以我不能轻易消除这些函数。我在微控制器上没有堆,我不想在微控制器上有堆,我什至没有为我实现的_sbrk功能(最终负责从堆中分配内存) ...

我现在只有一个存根,_sbrk如果它被调用,它只会触发一个硬故障,这样链接器就不会失败。但这显然不是很好。

所以我想知道,为什么以及何时(什么样的输入)会调用 Balloc。也许我可以证明这种类型的输入在我的情况下是不可能的,所以存根将是一个可制裁的黑客。

这是strtod.c:https ://www.codepile.net/pile/JZVLj6yQ

编辑:

_strtod_l() (这是由 strtod 包装的):

0 投票
3 回答
129 浏览

c++ - strtof() 函数放错小数位

我有一个字符串"1613894376.500012077",我想使用strtof它来转换为浮点数1613894376.500012077。问题是当我使用时,strtof我得到以下结果,小数点错位1.61389e+09。请帮我确定如何strof正确使用。

0 投票
1 回答
169 浏览

c - atof 和 strtod 的工作方式有什么不同吗?

我知道strtod()atof()函数用于从字符串转换为双精度。

但我无法弄清楚这两个功能之间的区别。

这两个功能有什么区别,如果有,请告诉我...

提前致谢。

0 投票
1 回答
117 浏览

algorithm - strtof() 的实现,浮点乘法和尾数舍入问题

这个问题与其说是关于 C,不如说是关于算法。我需要实现strtof()功能,它的行为与 GCC 完全相同 - 并且从头开始(没有 GNU MPL 等)。

让我们跳过检查,只考虑正确的输入和正数,例如 345.6e7。我的基本算法是:

  1. 将数字拆分为分数和整数指数,因此对于 345.6e7,分数为 3.456e2,指数为 7。
  2. 创建一个浮点指数。为此,我使用这些表:

并将浮点指数作为整数指数中相应位的乘积,例如 7 = 1+2+4 => float_exponent = 1.0e1f * 1.0e2f * 1.0e4f。

  1. 将分数乘以浮动指数并返回结果。

第一个问题来了:因为我们做了很多乘法,我们得到一个有点大的错误,因为每次四舍五入的乘法结果。因此,我决定深入研究浮点乘法算法并自己实现它:一个函数采用多个浮点数(在我的情况下 - 最多 7 个)并将它们在位级别上相乘。考虑我有uint256_t适合尾数产品的类型。

现在,第二个问题:将尾数积舍入到 23 位。我尝试了几种舍入方法(四舍五入,冯诺依曼四舍五入 -一篇关于它们的小文章),但没有一个可以为所有测试数字提供正确的结果。其中一些真的让我很困惑,比如这个:

7038531e-32。GCC 的strtof()返回 0x15ae43fd,所以正确的无偏尾数是 2e43fd。我选择乘以 7.038531e6(偏置尾数 d6cc86)和 1e-32(bm cfb11f)。得到的二进制形式的无偏尾数是

我必须四舍五入到 23 位。但是,通过所有舍入方法,我必须将其四舍五入,结果我会得到 2e43fe - 错误!因此,对于这个数字,获得正确尾数的唯一方法就是将其切碎 - 但切碎不适用于其他数字。

这在无数个晚上都有效,我的问题是:

  1. 这种 strtof() 方法是否正确?(我知道 GCC 使用 GNU MPL,并试图深入了解它。但是,尝试复制 MPL 的实现需要移植整个库,这绝对不是我想要的)。也许这种先拆分后乘算法不可避免地容易出错?我做了一些其他的小技巧,(例如,为浮点范围内的所有整数指数创建指数表),但它们导致了更多失败的转换。

  2. 如果是这样,我在四舍五入时是否遗漏了什么?我想了很久,但是这个 7038531e-32 的号码让我完全糊涂了。

0 投票
1 回答
44 浏览

c - 使用 strtok() 和 strtod() 从 c 中的命令行分隔 9 个 double 类型数字

我有以下带有 -k 参数的命令行界面,如下所示:-k "0.0:-1.0:0.0:-1.0:4.0:-1.0:0.0:-1.0:0.0"。这些是由":"分隔的 9 个双精度值。我已经设法将第一个双精度值 0.0 与 strtok() 和 strtod() 分开,但我需要所有 9 个值,但我似乎没有找到一种有效的方法来做到这一点。

也许有一个循环,然后将值保存在一个 2x3 数组中,但还没有结果。最后,我必须使用这些数字来操作图像中的像素。请注意,这些是示例数字,用户可以键入从 0 到假设为 255 的任何双精度值。希望有人可以提供一些建议。

下面是关于我如何设法分离第一个值的代码。我将不胜感激有关如何解决此问题的任何建议,谢谢!

0 投票
0 回答
23 浏览

arrays - 计算两个字符串数组的标量积的程序

正如标题中所说,这个程序的范围是做标量积 beetwen 2 数组,但是它们用逗号分隔值填充,并且它们被写成一个字符串,所以我使用 strtok 来“消除”所有的逗号,然后使用 strtod() 将所有值转换为双精度值,然后将它们与另一个数组中的值相乘,然后求和,以得到标量积。问题是我无法将所有值转换为双精度值,因为它只会停止第一个值。我附上了我所做的所有代码的链接如果您不理解函数的名称,请告诉我。先感谢您