sqrt(1.0 - pow(1.0,2)) 返回 -nan [重复]

2024-03-26

我发现了一个有趣的浮点问题。我必须在代码中计算几个平方根,表达式如下:

sqrt(1.0 - pow(pos,2))

其中 pos 循环从 -1.0 到 1.0。 -1.0 对于 pow 来说很好,但是当 pos=1.0 时,我得到一个 -nan。使用 gcc 4.4.5 和 icc 12.0 进行一些测试,输出为

1.0 - pow(pos,2) = -1.33226763e-15

and

1.0 - pow(1.0,2) = 0

or

poss = 1.0
1.0 - pow(poss,2) = 0

显然第一个会带来问题,是消极的。有人知道为什么 pow 返回一个小于 0 的数字吗?完整的违规代码如下:

int main() {
  double n_max = 10;
  double a = -1.0;
  double b = 1.0;
  int divisions = int(5 * n_max);
  assert (!(b == a));

  double interval = b - a;
  double delta_theta = interval / divisions;
  double delta_thetaover2 = delta_theta / 2.0;
  double pos = a;
  //for (int i = 0; i < divisions - 1; i++) {
   for (int i = 0; i < divisions+1; i++) {

    cout<<sqrt(1.0 - pow(pos, 2)) <<setw(20)<<pos<<endl;

     if(isnan(sqrt(1.0 - pow(pos, 2)))){
      cout<<"Danger Will Robinson!"<<endl;
      cout<< sqrt(1.0 - pow(pos,2))<<endl;
      cout<<"pos "<<setprecision(9)<<pos<<endl;
      cout<<"pow(pos,2) "<<setprecision(9)<<pow(pos, 2)<<endl;
      cout<<"delta_theta "<<delta_theta<<endl;
      cout<<"1 - pow "<< 1.0 - pow(pos,2)<<endl;
      double poss = 1.0;
      cout<<"1- poss "<<1.0 - pow(poss,2)<<endl;


  }

  pos += delta_theta;

}

 return 0;
 }

当您在循环中不断增加 pos 时,舍入误差会累积,在您的情况下,最终值 > 1.0。相反,通过每轮乘法来计算 pos,以仅获得最小量的舍入误差。

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

sqrt(1.0 - pow(1.0,2)) 返回 -nan [重复] 的相关文章

  • 具有可绑定属性的自定义视图未在 Xamarin.Forms SAP 上正确绑定

    我有一个复选框 应该触发按钮的 IsEnabled 事件 但不知何故 应该执行的命令永远不会正确绑定并因此执行 这是 CheckBox xaml cs 控件 中的可绑定属性 public static readonly BindablePr
  • 将 Stream 反序列化为 List 或任何其他类型

    尝试将流反序列化为List
  • 在动态事件处理程序中引用“this”

    在我的 myClass 类中 我使用 Reflection Emit 为 myClass 类成员之一动态编写事件处理程序 我已经成功地做到了这一点 现在 我想修改事件处理程序以调用 myClass 类中的实例方法之一 但是 我无法弄清楚如何
  • 如何从RichTextBox中获取显示的文本?

    如何获得显示的RichTextBox 中的文本 我的意思是 如果 RichTextBox 滚动到末尾 我只想接收那些对我来说可见的行 P S 获得第一个显示的字符串就足够了 您想使用 RichTextBox GetCharIndexFrom
  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 导出类时编译器错误

    我正在使用 Visual Studio 2013 但遇到了一个奇怪的问题 当我导出一个类时 它会抛出 尝试引用已删除的函数 错误 但是 当该类未导出时 它的行为会正确 让我举个例子 class Foo note the export cla
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 使用 AdHocWorkspace 会导致“不支持语言‘C#’”。

    在VS2015中使用Microsoft CodeAnalysis CSharp Workspaces的RC2 这段代码会抛出异常 var tree CSharpSyntaxTree ParseText var workspace new A
  • 允许使用什么类型的内容作为 C 预处理器宏的参数?

    老实说 我很了解 C 编程语言的语法 但对 C 预处理器的语法几乎一无所知 尽管我有时在编程实践中使用它 所以问题来了 假设我们有一个简单的宏 它扩展为空 define macro param 可以放入宏调用构造中的语法有哪些限制 调用宏时
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 将非算术类型作为参数传递给 cmath 函数是否有效?

    给定以下用户定义类型S具有转换功能double struct S operator double return 1 0 以及以下调用cmath http en cppreference com w cpp header cmath使用类型的
  • 设计 Javascript 前端 <-> C++ 后端通信

    在我最近的将来 我将不得不制作一个具有 C 后端和 Web 前端的系统 要求 目前 我对此了解不多 我认为前端将触发数据传输 而不是后端 所以不需要类似 Comet 的东西 由于在该领域的经验可能很少 我非常感谢您对我所做的设计决策的评论
  • 不兼容的类型 - 是因为数组已经是指针吗?

    在下面的代码中 我创建一个基于书籍结构的对象 并让它保存多个 书籍 我设置的是一个数组 即定义 启动的对象 然而 每当我去测试我对指针的了解 实践有帮助 并尝试创建一个指向创建的对象的指针时 它都会给我错误 C Users Justin D
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 从有符号字符转换为无符号字符然后再转换回来?

    我正在使用 JNI 并有一个 jbyte 类型的数组 其中 jbyte 表示为有符号字符 即范围从 128 到 127 jbyte 表示图像像素 对于图像处理 我们通常希望像素分量的范围为0到255 因此 我想将jbyte值转换为0到255
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代

随机推荐

  • Flutter - 如何测试本地化小部件?

    我读过这个问题的答案question https stackoverflow com questions 52463714 how to test localized widgets in flutter 但这并没有帮助我理解在我的情况下该
  • React 路由器更改 url 而不重新加载页面

    当我使用react router 0 13 3时 一切正常 我正在更改url并且发生了没有重新加载的转换 现在 在 React router 2 0 中 如果我手动更改 url 我的应用程序将完全重新加载 而不是简单的重定向 我如何解决它
  • C# Nhibernate 保存列表

    今天 我有一个包含 40 000 个寄存器的列表 我需要将其保存在我的 MSSQL 数据库中 当我尝试保存它时 我检查了控制台显示 我意识到它正在逐项保存 并且消耗了大量时间 即使我尝试使用下面的命令插入整个列表也是如此 List
  • 允许 UIWebView 内的位置访问

    我有一个基于 webview 的应用程序 当我访问时http maps google com http maps google com 我的 webview 没有像 Safari 那样传递位置 我知道需要 CLLocationManager
  • 检测显卡性能-JS

    这是一个远景 有没有办法通过 JS 插件来检测显卡性能的强弱 我们为客户构建了一个视差站点 它在性能较低的机器上出现卡顿 我们可以调整性能以使其全面更好地工作 但这当然会降低使用较高性能机器的用户的体验 我们也可以检测浏览器版本 但相同的浏
  • 如何在 Swift 中消除警告?

    我有一段代码会生成大量警告 已弃用的 API 使用 clang 我可以这样做 pragma clang diagnostic push pragma clang diagnostic ignored Wdeprecated declarat
  • 这个 Groovy 构造有什么问题?

    这是一个简短的 Groovy 脚本 import org apache commons io FileUtils def dir new File mydir def files FileUtils listFiles dir new St
  • 无法在 Qt 中设置几何图形

    我收到错误setGeometry在 Qt5 中的一个非常简单的程序中 int main int argc char argv QApplication a argc argv QLabel m photo new QLabel m phot
  • 自定义抛出异常javascript的错误消息

    我正在尝试自定义 javascript 中异常抛出的错误消息 到目前为止我的尝试都失败了 我正在尝试这个 但它不起作用 function abc sender args alert ex2 throw error new alert 你需要
  • 切换到 mysqli 后 LOCAL INFILE 出现问题

    任何了解在 PHP 中使用 LOCAL INFILE 的问题的人都会理解我对此的沮丧 我之前通过在连接调用中使用 128 标志 使 LOCAL INFILE 在所有 PHP 脚本中正常工作 mysql connect DB SERVER D
  • 我的 Qt 应用程序中收到了 WM_DEVICECHANGE,但未收到 DBT_DEVICEARRIVAL

    我正在按照一个示例来检测 Windows 7 中的 USB 闪存驱动器插件和拔出检测 我确实收到了通知WM DEVICECHANGE但不是DBT DEVICEARRIVAL这是插入USB设备时的情况 我的代码如下 WINDOWS EVENT
  • 使用 SystemJS 模块系统时 WebStorm 从索引文件导入

    假设我有以下源结构 home home component ts shared domain car domain ts house domain ts person domain ts index ts 所有域文件都包含类似的内容 exp
  • 是否可以在不与ios集成的情况下下载Google Drive文件

    是否可以从 google 驱动器下载文件而不集成它的 sdk 类文件 或身份验证 考虑以下场景 我在我的示例应用程序中使用了 UIWebView 我通过 UIWebView 登录 Google Drive 就像登录 Google Drive
  • svg转png时添加css样式

    I have the following problem I am converting the svg plot created by d3 js but the png is completely different from svg
  • 如何将 MIME 类型添加到 .htaccess?

    我想将以下 MIME 类型添加到由以下人员运行的网站Apache
  • 在 pandas 中添加时间戳偏移量

    我有一个数据框 df 当我运行 print df index 时 我得到 DatetimeIndex 2011 08 05 00 00 00 04 00 2011 08 05 01 00 00 04 00 2011 08 05 02 00
  • Rake on Rails 3 问题

    我将 Rails 2 3 应用程序移至 Rails 3 该应用程序实际上运行得很好 但我对 rake 任务有问题 看起来环境文件中的配置未正确初始化 我得到的错误是 rake aborted undefined method cache c
  • 从源代码构建 Android 时如何查看实际的 gcc 选项?

    我正在尝试调试我的 android 源构建环境 Android mk 文件 默认情况下 make 系统在构建过程中不显示 gcc 命令行 实现这一点的最佳方法是什么 对于提出请求的人来说可能为时已晚 但对于其他提出请求的人来说可能已经太晚了
  • 如何使用返回键关闭 UITextView 的键盘?

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 In IB s library the introduction tells us that when the return
  • sqrt(1.0 - pow(1.0,2)) 返回 -nan [重复]

    这个问题在这里已经有答案了 我发现了一个有趣的浮点问题 我必须在代码中计算几个平方根 表达式如下 sqrt 1 0 pow pos 2 其中 pos 循环从 1 0 到 1 0 1 0 对于 pow 来说很好 但是当 pos 1 0 时 我