floating-point 相关问题

浮点数是实数的近似值,可以表示比整数更大的范围,但使用相同数量的内存,代价是精度较低。如果您的问题是关于小算术错误(例如为什么0.2 + 0.1等于0.300000001?)或十进制转换错误,请在发布之前阅读下面链接的“信息”页面。

双精度算术的 std::numeric_limits

我正在为C++11设计一些双双精度和四双精度算术库。部分代码基于 https://www.davidhbailey.com/dhbsoftware/ 的 QD 和 DDFUN 库。 结构

回答 1 投票 0

unsigned long long int 参数的日志

我需要在c++代码中进行以下计算: (((n*log(n)) / log(4)) + 1) 其中 n 的类型为“unsigned long long int”(并且是 2 的幂,因此结果应该是整数)。 对于非常大的n...

回答 1 投票 0

如何在 C++ 中获得可表示的最低浮点值

我有一个程序,需要将变量设置为 C++ 中可表示的最低(非无限)双精度浮点数。我如何才能将变量设置为最低的双精度...

回答 3 投票 0

C++ pow异常类型转换

当我直接输出 std::pow(10,2) 时,我得到 100,而执行 (long)(pow(10,2)) 给出 99。有人可以解释一下吗? 计算< 当我直接输出std::pow(10,2)时,我得到100,而做(long)(pow(10,2))给出99。有人可以解释一下吗? cout<<pow(10,2)<<endl; cout<<(long)(pow(10,2))<<endl; main函数中的代码基本上就是这样。 编译器是 mingw32-g++.exe -std=c++11 使用 CodeBlocks Windows 8.1 如果有帮助的话 浮点数是近似值。有时您会得到一个可以精确表示的数字,但不要指望它。 100 应该可以表示,但在本例中却不能。有些东西注入了近似值并毁掉了每个人。 从浮点类型转换为整数时,整数不能容纳任何小数值,因此它们会被毫不客气地丢弃。没有隐式舍入,分数被丢弃。 99.9 转换为 99. 99,在 99 后带有一百万个 9。 因此,在从浮点类型转换为整数之前,先对数字进行四舍五入,然后进行转换。除非丢弃分数是你想要做的。 cout,以及大多数输出例程,在打印之前礼貌地、默默地舍入浮点值,因此,如果有一点近似值,用户不会介意。 这种不精确性也是您不应该直接比较浮点值的原因。 X 可能不完全是 pi,但它可能足够接近您的计算,因此您可以与 epsilon(一个捏造因子)进行比较,以判断您是否足够接近。 我觉得有趣的是,如果没有using namespace std;,我什至不会看到这个问题,并且花了很多时间试图解决这个问题。 (long)pow(10,2) 提供了 100 的预期结果。(long)std::pow(10,2) 则没有。 pow 和 std::pow 从 10,2 到 100 的路径存在一些差异,导致结果略有不同。通过将整个 std 命名空间拉入他们的文件,OP 不小心搬起了石头砸自己的脚。 这是为什么? 在文件顶部我们有 using namespace std;,这意味着编译器在查找 double pow(double, double) 重载时不仅仅考虑 pow,它还可以调用 std::pow 并且 std::pow 是一个漂亮的小模板,确保当使用 float 和 double 以外的数据类型调用时,会发生正确的转换,并且所有内容都是相同的类型。 (long)(pow(10,2)) 不匹配 double pow(double, double) 以及它与 的模板实例相匹配 double std::pow(int, int) 据我所知,这最终解决了 return pow(double(10), double(2)); 在一些模板巫毒之后。 有什么区别 pow(double(10), double(2)) 和 pow(10, 2) 在调用 int 时从 double 到 pow 的隐含转换是,我不知道。打电话给语言律师,因为这是一些微妙的事情。 如果这纯粹是一个舍入问题那么 auto tempa = std::pow(10, 2); 应该容易受到攻击,因为 tempa 应该正是 std::pow 返回的值 cout << tempa << endl; cout << (long) tempa << endl; 输出应该是 100 99 我明白了 100 100 因此立即将 std::pow(10, 2) 的返回值转换为 long 与存储然后转换不同。诡异的。 auto tempa 并不完全是 std::pow 返回的内容,或者还有其他事情发生,对我来说太深了。 这些是 std::pow 重载: float pow( float base, float exp ); double pow( double base, double exp ); long double pow( long double base, long double exp ); float pow( float base, int iexp );//(until C++11) double pow( double base, int iexp );//(until C++11) long double pow( long double base, int iexp ); //(until C++11) Promoted pow( Arithmetic1 base, Arithmetic2 exp ); //(since C++11) 但是你奇怪的行为是 MINGW 对双重存储的奇怪以及 Windows 运行时不喜欢它。我假设 Windows 看到的是类似 99.9999 的东西,当它被转换为整数类型时,它就会占据地板。 int a = 3/2; // a is = 1 mingw 使用 Microsoft C 运行时库,其 printf 的实现不支持“long double”类型。作为解决方法,您可以转换为“double”并将其传递给 printf。 因此,你需要 double double: 在 x86 架构上,大多数 C 编译器将 long double 实现为 x86 硬件支持的 80 位扩展精度类型(有时存储为 12 或 16 字节以保持数据结构对齐),如 C99 / C11 标准 (IEC 60559浮点运算(附录 F))。 Microsoft Visual C++ for x86 是一个例外,它使 long double 成为 double 的同义词。[2] Microsoft Windows 上的英特尔 C++ 编译器支持扩展精度,但需要使用 /Qlong‑double 开关来实现 long double,以对应于硬件的扩展精度格式。[3]

回答 2 投票 0

编译时检查 -fsingle- precision-constant

我从接受的答案中了解到 使 C 浮点文字浮点(而不是双精度)并且进行讨论, GCC 提供编译器标志 -fsingle- precision-constant 来强制浮点

回答 1 投票 0

定义 d2r=m.radians(1) 时出现类型错误“float”对象不可调用

我有一个奇怪的场景,理论上,一行非常简单的代码不应该给出错误,因为我已经看到它在其他 .py 文件中工作,但是当我在自己的代码中实现它时,我得到以下

回答 1 投票 0

将双精度型转换为浮点型时的精度问题

JDK在ThreadLocalRandom中有一个random方法: nextDouble(开始包含,结束结束) 但没有浮动版本。这里我想要浮动版本,这是我的实现: 公共静态浮动 nextFloat(...

回答 1 投票 0

将 double 转换为 float 时的 Java 精度问题

JDK在ThreadLocalRandom中有一个random方法: nextDouble(开始包含,结束结束) 但没有浮动版本。这里我想要浮动版本,这是我的实现: 公共静态浮动 nextFloat(

回答 1 投票 0

将 float 转换为 double 时的 Java 精度问题

JDK在ThreadLocalRandom中有一个random方法: nextDouble(开始包含,结束结束) 但没有浮动版本。这里我想要浮动版本,这是我的实现: 公共静态浮动 nextFloat(

回答 1 投票 0

Go中float64和complex128类型的最大值

我需要知道golang中float64和complex128变量类型的最大值。 go 似乎没有 float.h 的等价物,我不知道如何计算它。

回答 2 投票 0

为什么 Tcl 8.4 和 8.5 之间显示的浮点数的表观精度会发生变化?

我观察到 tcl8.6.6 的精度值不正确。此行为更改是从 tcl 8.5 开始的。我没有修改过tcl_ precision。在tcl8.5和tcl8.6中默认为0 这是参考...

回答 1 投票 0

位置编号系统

我一直在研究浮点数的局限性,并了解了我们的算法由于使用浮点数而遭受的“精度损失”。然后我学会了...

回答 1 投票 0

如何以 constexpr 方式将整数转换为 CUDA 的 __half FP16 类型?

我是空中客车的开发人员,我面临着半精度算术的困难。 在库中的某个时刻,我需要在 constexpr 中将 IntType 转换为相关的 FloatType(相同的位数)

回答 2 投票 0

SET 命令 - 浮点数?

如何在Windows中使用SET命令进行浮点运算。 /A 代表算术,%VAR% 打印 VAR 的数据而不是名称。 例如当我这样做时: 设置 /A VAR=“2.5+3.1” 回波%VAR%

回答 3 投票 0

int16_t 到 __half constexpr 转换

我是空中客车的开发人员,我面临着半精度算术的困难。 在库中的某个时刻,我需要在 constexpr 中将 IntType 转换为相关的 FloatType(相同的位数)

回答 1 投票 0

If 语句无法计算基本浮点问题

我正在阅读 Bjarne Stroustrup 的《Programming-Principles And Practice Using C++》一书,目前我被第 4 章的第 5 个“练习”问题难住了。 有一个服务...

回答 1 投票 0

在 Ruby 中使用大整数将小数正确转换为浮点

出于学习目的,我正在尝试实现将十进制字符串转换为 64 位浮点数的算法的核心部分。 我使用此页面的解释作为指导:ht...

回答 1 投票 0

在 C# 中从浮点数中减去一个值并将其加回来不会给出原始值[重复]

上下文:我试图确定两个角度,当两个角度相加 d 次时,等于 6.28319 弧度(或 360 度)。下面是我的代码,我在其中计算 dTheta(6.28319 弧度除以...

回答 1 投票 0

为什么float类型和decimal类型有区别

在 SQL Server 数据库中,我的表中的浮点列中存储了一个值,对应于格式为“秒.毫秒”的持续时间,我想要微秒数。 我有

回答 1 投票 0

如何解决Float型机器Epsilon计算错误?

#包括 无效 get_eps(浮点 *eps) { *每股收益=1.0f; while ((1.0f + *eps / 2.0f) != 1.0f) { *每股收益/= 2.0f; } } int main(){ 浮动 eps; get_eps(&eps);

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.