不堪大用的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还是对的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

指针的偏移遍历数组--指针和数组名的区别

1.指针取地址&#xff1a;可以是数组名&#xff0c;可以是数组首地址&arr[0] 2.指针偏移完后记得回到数组首地址 #include <stdio.h>int main(){int arr[3] {1,2,3};int *p;int i;p arr; // 数组名就是数组的首地址// p &arr[0] 数组的首地址就是首个元素…

二分答案跳石头游戏

步骤&#xff1a; 输入&#xff1a; 用户输入了三个整数&#xff0c;分别表示石头的总长度l&#xff0c;石头的数量n&#xff0c;以及最多可以撤去的石头数量m。 初始化石头位置数组&#xff1a; 创建一个长度为n2的数组arr&#xff0c;用于存储每块石头的位置。数组的第一项…

FreeRTOS作业day4

1.总结二进制信号量和计数型信号量的区别&#xff0c;以及他们的使用场景。 二进制信号量的数值只有0和1&#xff0c;用于共享资源的访问 计数型信号量的值一般是大于或者等于2&#xff0c;用于生产者和消费者模型 2.使用技术型信号量完成生产者和消费者模型实验。 void Sta…

使用 ChatGPT 集成精通高级 Excel(二)

原文&#xff1a;Mastering Advanced Excel - With ChatGPT Integration 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第九章数据透视表 介绍 数据透视表是一种基于交互式工作表的表格&#xff0c;可以快速汇总大量数据&#xff0c;使用您选择的格式和计算方法。它…

AI论文速读 | 2024[WWW]不只是路线:联合 GPS 和路线建模的轨迹表示学习

论文标题&#xff1a;More Than Routing: Joint GPS and Route Modeling for Refine Trajectory Representation Learning 作者&#xff1a;Zhipeng Ma&#xff08;麻志鹏&#xff09;, Zheyan Tu, Xinhai Chen, Yan Zhang, Deguo Xia, Guyue Zhou, Yilun Chen, Yu Zheng&…

基于springboot实现影城管理系统项目【项目源码+论文说明】

基于springboot实现影城管理系统演示 摘要 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多生活之中&#xff0c;随之就产生了“小徐影城管理系统”&#xff0c;这样就让小徐影城管理系统更加方便简单。 对于本小…

面试官:为什么忘记密码要重置,而不是告诉我原密码?

前端训练营&#xff1a;1v1私教&#xff0c;终身辅导计划&#xff0c;帮你拿到满意的 offer。 已帮助数百位同学拿到了中大厂 offer。欢迎来撩~~~~~~~~ Hello&#xff0c;大家好&#xff0c;我是 Sunday。 最近有个同学在面试中遇到了一个很有意思的问题&#xff0c;我相信大多…

基于深度学习的铁轨缺陷检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;本文深入研究了基于YOLOv8/v7/v6/v5的铁轨缺陷检测系统。核心技术上&#xff0c;文章采用了最先进的YOLOv8&#xff0c;并整合了YOLOv7、YOLOv6、YOLOv5算法&#xff0c;进行了性能指标的对比分析。文中详细阐述了国内外铁轨缺陷检测的研究现状、数据集处理方法…

【Linux】error: Failed to initialize NSS library

【Linux】error: Failed to initialize NSS library 原因&#xff1a;卸载了sqlite [rootnode1 ~]# rpm -qa|grep sql sqlite-3.7.17-8.el7.x86_64 rpm -e --nodeps sqlite-3.7.17-8.el7.x86_64 百度搜索 sqlite-3.7.17-8.el7.x86_64 下载此rpm包 cd /usr/local/download …

【C++第三阶段】STL初识

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 STL初步认识vector存放内置数据类型vector存放自定义数据类型vector 嵌套容器 STL初步认识 回顾时&#xff0c;需要回答自己 ①STL是什么&#xff1f; ②STL怎么用&#xff1f; …

【简单讲解下WebSocket】

&#x1f308;个人主页:程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【DA-CLIP】test.py解读,调用DA-CLIP和IRSDE模型复原计算复原图与GT图SSIM、PSNR、LPIPS

文件路径daclip-uir-main/universal-image-restoration/config/daclip-sde/test.py 代码有部分修改 导包 import argparse import logging import os.path import sys import time from collections import OrderedDict import torchvision.utils as tvutilsimport numpy as…

ruoyi-nbcio-plus基于vue3的flowable流程元素选择区面板的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

工业项目中你连SCADA都没见过?

什么是SCADA SCADA是一种监控和数据采集系统&#xff0c;全称是Supervisor.Contro.an.Dat.Acquisition。SCADA系统在工业项目中具有广泛应用&#xff0c;包括生产线监控、工艺控制、设备维护、能源管理、安全监控和产量跟踪等多个场景。通过实时监测、数据采集和远程控制等功能…

网络协议栈--数据链路层

目录 对比理解“数据链路层”和“网络层”一、认识以太网1.1 以太网帧格式1.2 认识MAC地址1.3 对比理解MAC地址和IP地址1.4 认识MTU1.5 MTU对IP协议的影响1.6 MTU对UDP协议的影响1.7 MTU对于TCP协议的影响1.8 查看硬件地址和MTU 二、ARP协议2.1 ARP协议的作用2.2 ARP协议的工作…

15、Scalable Diffusion Models with Transformers

简介 官网 DiT&#xff08;Diffusuion Transformer&#xff09;将扩散模型的 UNet backbone 换成 Transformer&#xff0c;并且发现通过增加 Transformer 的深度/宽度或增加输入令牌数量&#xff0c;具有较高 Gflops 的 DiT 始终具有较低的 FID&#xff08;~2.27&#xff09;…

springJPA如果利用注解的方式 进行多表关联操作

前言:上一篇我写了个用JPA的Specification这个接口怎么做条件查询并且进行分页的,想学的自己去找一下 地址:springJPA动态分页 今天我们来写个 利用jpa的Query注解实现多表联合查询的demo 注意: 不建议在实际项目中用这玩意. 因为: 1. 用Query写的sql 可读性极差,给后期维护这…

六角螺母缺陷分类数据集:3440张图像

六角螺母缺陷数据集&#xff1a;包含变形&#xff0c;划痕&#xff0c;断裂&#xff0c;生锈&#xff0c;以及优质螺母图片数据&#xff0c;共计3440张&#xff0c;无标注 一.变形螺母-1839 二.断裂螺母-287 三.划痕螺母-473 四.生锈螺母-529 五.优良螺母-312 适用于CV项目&am…

法律行业案例法模型出现,OPenAI公布与法律AI公司Harvey合作案例

Harvey与OpenAl合作&#xff0c;为法律专业人士构建了一个定制训练的案例法模型。该模型是具有复杂推理广泛领域知识以及超越单一模型调用能力的任务的AI系统&#xff0c;如起草法律文件、回答复杂诉讼场景问题以及识别数百份合同之间的重大差异。 Harvey公司由具有反垄断和证…

阿里云服务器199元一年,ECS u1实例性能测评

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…