浮动小于 FLT_MIN。为什么是FLT_TRUE_MIN?

2023-11-25

在尝试了解浮点下溢情况下会发生什么时,我发现我可以使浮点数比 FLT_MIN 小得多。我在 OS 10.9 上使用 xcode 5.1。语言方言是 gnu99。

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main(int argc, const char * argv[])
{
    float underflow = FLT_MIN * 0.0000004;

    printf("Float min is %f or %e.\nUnderflow is %f or %e\nMin float exp is %d.\n", FLT_MIN, FLT_MIN, underflow, underflow, FLT_MIN_10_EXP);

    return 0;
}

Prints:
浮点数最小值为 0.000000 或 1.175494e-38。
下溢为 0.000000 或 4.203895e-45
最小浮点数exp为-37。

  1. 有没有更有效的方法来证明数据类型的限制?
  2. 为什么 FLT_MIN 实际上不是最小的浮点值?我还应该使用其他常量吗?输入上一个问题后,我发现 FLT_TRUE_MIN。这个数字是多少?

达到“低于最低值”的两种可能性:

  1. float range:

    Typical float数字有 2 个范围:全精度(正常范围)从FLT_MAX向下FLT_MIN和第二个范围,其精度降低FLT_MIN向下FLT_TRUE_MIN。第二个范围称为“次正常”,通常提供大约 10^-7 以上的范围。

    FLT_TRUE_MIN是“最小正浮点数”

    FLT_MIN是“最小标准化正浮点数”

    FLT_MIN_10_EXP是“使得 10 的幂在归一化浮点数范围内的最小负整数”

    C11dr §5.2.4.2.2

    一般来说0 < FLT_TRUE_MIN <= FLT_MIN <= 10^FLT_MIN_10_EXP <= 10^-37

  2. 数学表现为double.

    printf()隐蔽每个float传递给它一个double。 C 允许优化代码,以便将值传递给printf()可能是double的产品FLT_MIN * 0.0000004.

    float underflow = FLT_MIN * 0.0000004;
    printf("%e\n", underflow);
    

    如果输出是4.701976e-45而不是4.203895e-45,情况本来就是这样。


注意“次正常”。一个令人信服的理由for次正规(或非正规)数存在以下问题。

float a,b;
... // somehow a and b are set.

// Are the 2 below equivalent?
if (a == b) foo();
if ((a - b) == 0) foo();

没有次正规数,附近有 2 个几乎相同值的数FLT_MIN会有一个非零的数学差异远低于FLT_MIN结果将四舍五入为0.0.

对于次正规数,每对不同的数之差floats 可以用除0.0. **

** 除了+0.0, -0.0。有符号零有其自身的特点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浮动小于 FLT_MIN。为什么是FLT_TRUE_MIN? 的相关文章

  • 静态只读字符串数组

    我在我的 Web 应用程序中使用静态只读字符串数组 基本上数组有错误代码 我将所有类似的错误代码保存在一个数组中并检查该数组 而不是检查不同常量字符串中的每个错误代码 like public static readonly string m
  • 当我在组合框中选择一个项目时,如何防止 TextChanged 事件?

    我有一个TextChanged http msdn microsoft com en us library system windows forms control textchanged aspx我的事件ComboBox http msd
  • 使用 C# 登录《我的世界》

    我正在尝试为自己和一些朋友创建一个简单的自定义 Minecraft 启动器 我不需要启动 Minecraft 的代码 只需要登录的实际代码行 例如 据我所知 您过去可以使用 string netResponse httpGET https
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 为什么在 WebApi 上下文中在 using 块中使用 HttpClient 是错误的?

    那么 问题是为什么在 using 块中使用 HttpClient 是错误的 但在 WebApi 上下文中呢 我一直在读这篇文章不要阻止异步代码 https blog stephencleary com 2012 07 dont block
  • 从同一个类中的另一个构造函数调用构造函数

    我有一个带有两个构造函数的类 C 这是代码片段 public class FooBar public FooBar string s constructor 1 some functionality public FooBar int i
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 告诉 Nancy 将枚举序列化为字符串

    Nancy 默认情况下在生成 JSON 响应时将枚举序列化为整数 我需要将枚举序列化为字符串 有一种方法可以通过创建来自定义 Nancy 的 JSON 序列化JavaScript 原始转换器 https github com NancyFx
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个

随机推荐

  • Google App Engine 和 Google Compute Engine 有什么区别?

    我想知道 App Engine 与 Compute Engine 之间有什么区别 谁能向我解释其中的区别吗 应用引擎是一个平台即服务 这意味着您只需部署代码 平台就会为您完成其他所有事情 例如 如果您的应用程序非常成功 App Engine
  • 可变参数模板递归返回类型推导编译错误

    为什么下面的代码不能编译 template
  • 为什么 fclose 会挂起/死锁? (视窗)

    我有一个目录更改监视器进程 它从一组目录中的文件读取更新 我有另一个进程 可以对这些目录中的大量文件执行少量写入 测试程序 想象一下大约 100 个目录 每个目录有 10 个文件 每秒修改大约 500 个文件 运行一段时间后 目录监视器进程
  • “错误:‘myfn’声明为返回函数的函数”是什么意思?

    我正在尝试编写一个返回函数指针的函数 这是我的最小示例 void myfn int Doesn t work supposed to be a function called myfn that returns a pointer to a
  • 使用 THREE.Frustum 计算近/远平面顶点

    我需要一些帮助来处理 THREE Frustum 对象 我的问题 我需要计算近 远平面顶点 我已经看过这些教程 http www lighthouse3d com tutorials view frustum culling view fr
  • 使用php在谷歌云存储桶中创建文件夹

    我对谷歌云存储非常陌生 我想使用 php 编码在存储桶中创建文件夹 我搜索了很多网站 在 1 上我看到它是这样写的 在存储桶内创建文件夹将创建一个以目录命名的占位符对象 没有数据内容和 mimetype application x dire
  • 如何在 Flutter WebView 中将数据发布到 URL

    我想将一些数据发布到 Flutter WebView 中的 URL 主体 那么 我该怎么做呢 webview flutter目前没有发送帖子请求的方法 不过 你可以试试我的flutter inappwebview插入 它支持POST请求 使
  • Vue.js - 在 v-for 中使用过滤器

    我有一个简单的 Vue 过滤器 它将数组的长度限制为 n 个元素 像这样使用它效果很好 array limitArray 2 现在我想在里面使用它v for循环 像这样 li li 但这会引发错误 如何在内部使用过滤器v for 编辑 可能
  • like 子句 JPQL 中的参数

    我正在尝试使用 like 子句编写 JPQL 查询 LIKE code 我想要 code 4 并找到 455 554 646 我无法通过 code value namedQuery setParameter this value 因为在另一
  • Android studio git 使用私钥

    A 有一个 git 仓库的地址 我还有一个 open ssh 格式的私钥 Android Studio中的git可以使用吗 我尝试搜索一些信息 但目前没有运气 感谢您提供任何有用的信息 Edit My steps 1 I put my pr
  • Bing图片搜索分页-无限滚动

    当你在Bing搜索引擎上搜索图片时 结果显示如下 http www bing com images search q stack overflow 请注意 您如何不断滚动并滚动 并且没有 正常 分页 我的问题是 他们是如何做到这一点的 我可
  • 核心转储文件名使用 core_pattern %e.%p.core 获取线程名称而不是可执行文件名称

    我最近开始使用 pthread setname np 在我的应用程序中设置一些线程名称 执行此操作后 如果指定线程之一内发生崩溃 则核心转储文件名将获取线程名称 而不是 core pattern e p core 的可执行文件名称 根据核心
  • localStorage - 清除()或removeItem()?

    我应该使用clear 抹去一切localStorage 或者我应该手动removeItem 我在该特定网站上设置的那些 很容易跟踪 我这么问是因为我不想最终消灭用户localStorage如果他们设置了其他值 我正在本地主机中测试这个并注意
  • 检测编码并将所有内容设为 UTF-8

    我从各种 RSS 源中读出大量文本并将它们插入到我的数据库中 当然 提要中使用了几种不同的字符编码 例如UTF 8 和 ISO 8859 1 不幸的是 文本编码有时会出现问题 例子 Fu ball 中的 在我的数据库中应如下所示 如果是 则
  • 将 fseek 与指向 stdin 的文件指针结合使用

    根据命令行参数 我设置一个文件指针指向指定文件或标准输入 用于管道传输 然后 我将此指针传递给许多不同的函数以从文件中读取 这是获取文件指针的函数 FILE getFile int argc char argv FILE myFile NU
  • 如何使用Chef设置环境变量?

    有一个与此类似的问题 但无法使其正常工作 我想简单地设置一个环境变量 然后使用它 execute start zookeeper do cwd opt zookeeper 3 4 5 bin command zkServer sh star
  • 如何在 Bootstrap Validation 中创建自定义验证

    我的目标是验证特定的文本字段 其中该字段依赖于其他元素的值 例如 我有一个选择字段和一个输入文本字段 仅当选择标签具有选定值时才需要输入文本 希望有人能帮忙 看一眼 http bootstrapvalidator com 在我们的项目中 我
  • ValueError:错误的项目数量超过 500,放置意味着 1,Python 和 Pandas

    我只从 xlsx 文件导入两列 我想计算一些东西 平均值 偏差 百分比变化 然后我想绘制所有这些 第一部分不会给我带来任何问题 但绘图却会给我带来任何问题 我的代码如下所示 import matplotlib pyplot as plt i
  • 使用连续变量的决策树[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有一个关于使用连续变量的决策树的问题 我听说当输出变量是连续的并且输入变量是分类的时 分割标准是减少方差什么的 但我不知道如果输入变量是连续的它是如何工作的 输入变量 连续 输出变
  • 浮动小于 FLT_MIN。为什么是FLT_TRUE_MIN?

    在尝试了解浮点下溢情况下会发生什么时 我发现我可以使浮点数比 FLT MIN 小得多 我在 OS 10 9 上使用 xcode 5 1 语言方言是 gnu99 include