不堪大用的pow

【题目描述】

输出100~999中的所有水仙花数。若3位数ABC满足,则称其为水仙花

数。例如,所以153是水仙花数。

【题目来源】

刘汝佳《算法竞赛入门经典  第2版》习题2-1 水仙花数(daffodil)

题目很简单,利用分离整数的方法将数字分离后判断是否满足水仙花数条件即可,代码如下:

#include<stdio.h>
int main(){for(int i=100; i<=999; i++){int ge = i%10;int shi = i/10%10;int bai = i/100;if(i == bai*bai*bai + shi*shi*shi + ge*ge*ge){printf("%d\n", i);}}return 0;
}

为什么这样的数会叫“水仙花数”呢?

它源于一个古老的传说。说有一位名叫纳西塞斯的年轻人,他过于自恋,看到水中自己的影子不能自已,于是纵身一扑……

在他死去的地方,长出了一株水仙花。

人们为了纪念这位自恋的年轻人,将这种同样有自恋特质的数命名为“水仙花数”。

如果把水仙花数的公式写成下面这种形式,你就能充分品味出它的自恋特质了。

ABC = A*A*A + B*B*B + C*C*C

不过,这里老金想提的是另一个问题:假设用pow()函数求立方有没有问题?

本题老金测试过是完全没有问题的。但网上普遍说pow()因为浮点数的原因是存在误差的,即便底数和指数都是整数。

老金不知道pow()的内部实现是什么样的(据说算法非常复杂),但老金知道,整数值是不会产生浮点数误差的,导致出现误差的是小数部分(详见《浮点数产生误差的根源》一文),所以老金认为,当底数和指数都是整数时,按理pow()函数也是不应该产生误差的。

实践是检验真理的唯一标准,编段代码测试一下:

#include<stdio.h>
#include<math.h>
int main(){long long a, b; //x的y次幂:a用循环求,b用pow求int cnt=0, cnt_dif=0; //记录计算次数、差异次数for(int x=1; x<=100; x++){for(int y=1; y<=9; y++){b = pow(x,y);a=1;for(int z=1; z<=y; z++){a *= x;}if(a != b){printf("%d %d %lld %lld\n", x, y, a, b);cnt_dif++;}cnt++;}}printf("%d %d", cnt, cnt_dif);return 0;
}

思路很简单,分别用循环的方式和pow函数求出x的y次幂,对比二者的值是否一致,不一致就打印出来。

输出结果:

pow函数实在是不争气,辜负了老金的期望,900次运算中竟有21次产生了误差。

大哥,就是有一次也不行啊!

从上面的运行结果可以看出,产生误差的数都是非常大的幂(106以上)。此外,指数基本都是9,只有一个是8,说明指数越大,越容易产生误差。

不管怎么样,这个结果都证明了即便底数和指数都是整数,当幂的值变得足够大时,就会产生误差。

综上,避免用pow还是对的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/792462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型在未来如何与体育运动结合

AI大模型与体育运动的结合预示着未来体育领域将迎来革命性的变化。这种结合不仅能提升运动员的训练和比赛表现&#xff0c;还能改善观众的观赛体验&#xff0c;优化体育管理和运营。以下是几个预期中AI大模型将如何与体育运动结合的方向&#xff1a; 1. 运动员表现分析与提升 …

配置vite配置文件更改项目端口、使用@别名

一、配置vite配置文件更改项目端口 vite官方文档地址&#xff1a;开发服务器选项 | Vite 官方中文文档 (vitejs.dev) 使用&#xff1a; 二、使用别名 1. 安装 types/node types/node 包允许您在TypeScript项目中使用Node.js的核心模块和API&#xff0c;并提供了对它们的类型…

C语言经典例题(17) --- 最小公倍数、单词倒置、你是天才吗?、完美成绩、判断整数的奇偶性

1.最小公倍数 正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 输入描述&#xff1a;输入两个正整数A和B。 输出描述&#xff1a;输出A和B的最小公倍数。 输入&#xff1a;5 7 输出&#xff1a…

4. python练习题4-水仙花数

4. python练习题4-水仙花数 【目录】 文章目录 4. python练习题4-水仙花数1. 目标任务2. 水仙花数的特点3. 如何判断一个数是否是水仙花数&#xff1f;4. 打印3位水仙花数5. 判断一个数是不是水仙花数6. 列表推导式6. 列表推导式判断一个数是不是水仙花数 【正文】 1. 目标任务…

picGo图床搭建gitee和smms(建议使用)

picGoGitee 这个需要下载gitee插件, 因为官方频繁的检索文件类型, 有时候也会失效 如果没有特殊要求平时存个学习的要看图中文字的重要的图片建议就是smms, 免费也够用! 图片存本地不方便, 各种APP中来回传还会失帧损失画质, 所以你值得往下看 picGosmms 建议使用这个, sm…

代码随想录-算法训练营day01【二分查找、移除元素、插入元素】

专栏笔记&#xff1a;https://blog.csdn.net/weixin_44949135/category_10335122.html 第一章 数组part01今日任务 数组理论基础&#xff0c;704. 二分查找&#xff0c;27. 移除元素 详细布置数组理论基础 文章链接&#xff1a;https://programmercarl.com/%E6%95%B0%E7%BB%…

递归与树的深度优先搜索:探索它们之间的关系

文章目录 递归与树的深度优先搜索&#xff1a;探索它们之间的关系递归的基本概念树的深度优先搜索递归与树的深度优先搜索的关系反转链表合并两个有序链表 总结 递归与树的深度优先搜索&#xff1a;探索它们之间的关系 递归是一种强大而优雅的编程技术,它允许我们通过将问题分…

每日面经分享(python part1)

Python中的深拷贝和浅拷贝的区别是什么&#xff1f; a. 浅拷贝创建一个新的对象&#xff0c;但其中的可变元素仍然共享引用。只有对象的第一层被复制&#xff0c;而更深层次的嵌套对象仍然是引用。更改其中一个对象的属性会影响到其他对象。 b. 深拷贝创建一个完全独立的新对象…

docker部署nacos,单例模式(standalone),使用内置的derby数据库,简易安装

文章目录 前言安装创建文件夹docker指令安装docker指令安装-瘦身版 制作docker-compose.yaml文件查看页面 前言 nacos作为主流的服务发现中心和配置中心&#xff0c;广泛应用于springcloud框架中&#xff0c;现在就让我们一起简易的部署一个单例模式的nacos&#xff0c;版本可…

【Linux】详解动态库链接和加载对可执行程序底层的理解

一、动静态库链接的几种情况 如果我们同时提供动态库和静态库&#xff0c;gcc默认使用的是动态库。如果我们非要使用静态库&#xff0c;要加-static选项。如果我们只提供静态库&#xff0c;那可执行程序没办法&#xff0c;只能对该库进行静态链接&#xff0c;但程序不一定整体…

python和pip中常见命令和方法

玩python的同学想必没有不用pip的吧&#xff0c;pip是python包管理工具&#xff0c;和Nodejs的npm、Java的maven类似&#xff0c;这些依靠开源力量建立起的庞大软件库极大提高了开发的效率&#xff0c;下面是整理和总结pip中的常见命令和方法。 pip更新版本 python -m pip inst…

【架构二】胖瘦客户端

瘦客户端和胖客户端是指在客户端-服务端架构中&#xff0c;客户端所承担的功能和责任不同。瘦客户端是指在客户端设备上&#xff0c;主要负责显示用户界面和处理用户输入&#xff0c;而大部分的应用逻辑和数据处理都在服务端完成。瘦客户端通常只需要较少的计算能力和存储资源&…

利用Spark将Kafka数据流写入HDFS

利用Spark将Kafka数据流写入HDFS 在当今的大数据时代&#xff0c;实时数据处理和分析变得越来越重要。Apache Kafka作为一个分布式流处理平台&#xff0c;已经成为处理实时数据的事实标准。而Apache Spark则是一个强大的大数据处理框架&#xff0c;它提供了对数据进行复杂处理…

Echarts 自适应宽高,或指定宽高进行自适应

文章目录 需求分析 需求 有一个按钮实现对Echarts的指定缩放与拉长&#xff0c;形成自适应效果 拉长后效果图 该块元素缩短后效果图 分析 因为我习惯使用 ref 来获取组件的 DOM 元素&#xff0c;然后进行挂载 <div ref"echartsRef" id"myDiv" :sty…

OCR常用识别算法综述

参考&#xff1a;https://aistudio.baidu.com/education/lessonvideo/3279888 语种&#xff1a;常用字符36与常用汉字6623&#xff0c;区别。 标注&#xff1a;文本型位置/单字符位置&#xff0c;后者标注成本大 挑战&#xff1a;场景文字识别&#xff1a;字符大小、颜色、字体…

力扣1379---找出克隆二叉树的相同节点(Java、DFS、简单题)

目录 题目描述&#xff1a; 思路描述&#xff1a; 代码&#xff1a; &#xff08;1&#xff09;&#xff1a; &#xff08;2&#xff09;&#xff1a; 题目描述&#xff1a; 给你两棵二叉树&#xff0c;原始树 original 和克隆树 cloned&#xff0c;以及一个位于原始树 ori…

蓝牙学习九(定向广播 ADV_DIRECT_IND)

一、简介 广播类型有如下&#xff1a; 非定向可连接广播&#xff08;ADV_IND&#xff09;。可连接的非定向广播&#xff0c;表示当前设备可以接受任何设备的连接请求。 定向可连接广播&#xff08;ADV_DIRECT_IND&#xff09;。可连接的定向广播&#xff0c;设备不能被主动扫描…

Kotlin:常用标准库函数(let、run、with、apply、also)

一、let 扩展函数 Kotlin标准库函数let可用于范围确定和空检查。当调用对象时&#xff0c;let执行给定的代码块并返回其最后一个表达式的结果。对象可以通过引用(默认情况下)或自定义名称在块中访问。 let扩展函数源码 let.kt文件代码 fun main() {println("isEmpty $is…

`std::ref`的作用是将一个对象包装成一个引用包装器

std::ref是C标准库中的一个函数模板&#xff0c;位于<functional>头文件中&#xff0c;通常与std::bind一起使用。std::ref的作用是将一个对象包装成一个引用包装器&#xff0c;使得在函数对象的传递中能够以引用的方式传递对象&#xff0c;而不是进行对象的拷贝。 具体…

求区间和

题源 记录一哈前缀和吧 题目描述 给定 n 个正整数组成的数列 a1​,a2​,⋯,an​ 和 m 个区间[li​,ri​]&#xff0c;分别求这 m 个区间的区间和。 对于所有测试数据&#xff0c;m≤10^5,ai​≤10^4 输入格式 第一行&#xff0c;为一个正整数 n 。 第二行&#xff0c;为 n 个正…