紫书第1章实验

实验A1:表达式11111∗1111111111\ast1111111111∗11111的值是多少?改成6个1呢?9个1呢?

以下几个都用有符号整数%d\%d%d输出结果。

表达式11111∗1111111111\ast1111111111∗11111的值为123454321123454321123454321。不越界,所以得到了正确结果。

把5个1改成6个1,结果变成了−539247567-539247567−539247567,原因是,原本的结果是111111∗111111=12345654321>231−1=2147483647111111\ast111111=12345654321>2^{31}-1=2147483647111111∗111111=12345654321>231−1=2147483647,产生了越界,所以intintint的32位上的结果是12345654321%232=3755719729=231+160823608112345654321\%2^{32}=3755719729=2^{31}+160823608112345654321%232=3755719729=231+1608236081,由intintint负数的补码表示规则,第一位是符号位,所以输出的值为−231+1608236081=−539247567-2^{31}+1608236081=-539247567−231+1608236081=−539247567,和试验结果相符。

把5个1改成9个1,显然更是越界的,得到的结果是1653732529=(111111111∗111111111)%2321653732529=(111111111\ast111111111)\%2^{32}1653732529=(111111111∗111111111)%232,相符。

如果改成%f\%f%f,都会输出0.0000000.0000000.000000,这涉及到浮点数的保存方法,由于%f\%f%f是自动寻64位内存的,所有intintint型的数都在后32位尾数里,都很小,%f\%f%f自动保留6位小数之后都是0.0000000.0000000.000000。

实验A2:把实验A1中的所有数换成浮点数,结果如何?

拿11111.0∗11111.011111.0\ast11111.011111.0∗11111.0为例,如果用%f\%f%f输出,可以输出正确的结果123454321.000000123454321.000000123454321.000000,因为%f\%f%f可以表示的数据范围还是挺大的。但是如果改成了%d\%d%d,结果就变成了−272632416-272632416−272632416。这个结果是因为123454321≈1.83961...∗226123454321\approx1.83961...\ast2^{26}123454321≈1.83961...∗226,如果是采用IEEE的标准存储,不出意外这应该是尾数的后32位部分。从实验A1和A2我们显然可以明白intintint和floatfloatfloat在printf里显然不可以瞎转换。

用%d\%d%d输出显然无法得到正确结果,但注意当九个1时,即使用%f\%f%f输出,结果也会变成12345678987654320.00000012345678987654320.00000012345678987654320.000000,个位出现了1的偏差。究其原因,之前提到浮点数使用幂存储方法,doubledoubledouble类型有53位尾数,而log⁡212345678987654321\log_212345678987654321log2​12345678987654321刚好是53点几,尾数的精确度是2−522^{-52}2−52,乘上阶数2532^{53}253刚好到达个位数量级,所以差不多会开始产生偏差。

实验A3:表达式sqrt(-10)的值是多少?尝试用各种方式输出,在计算的过程中会报错吗?

如果用doubledoubledouble输出sqrt(−10)sqrt(-10)sqrt(−10),会得到nan,即not a number,不会报错。

如果用intintint输出sqrt(−10)sqrt(-10)sqrt(−10),又得到了之前神秘的负数−272632416-272632416−272632416,这应该是一个随机的结果,因为在程序里添加了一段文字之后输出又会变化,其中的转化规则我也不知道,也不重要。因为nan用浮点数表示,阶码部分全是1,小数部分不为0,所以小数部分可以任意取,有很多种。会返回哪一种给%d\%d%d,我暂时还不知道。

实验A4:表达式1.0/0.0、0.0/0.0的值是多少?尝试用各种方式输出,在计算的过程中会报错吗?

1.0/0.01.0/0.01.0/0.0其实是可以算出来的,用%f\%f%f输出得到infinfinf,但用%d\%d%d输出也是一个可变化的结果,我不太理解,照理说infinfinf的浮点表示不是固定的吗?还是这里的浮点数没有采用IEEE的标准?求指教…

0.0/0.00.0/0.00.0/0.0的结果是nan,一般printfprintfprintf输出的时候,能算出来的会输出对应的0或者infinfinf,算不出来的,就是nan。用%d\%d%d表示的结果就不谈了,也是可变的。

实验A5:表达式1/0的值是多少?在计算的过程中系统会报错吗?

现在可以输出一个随机值,并没有输出infinfinf,因为divided by zero属于系统未定义行为。但我记得以前似乎是会报错的?

实验B1:同一行中输入12和2,并以空格分隔,是否得到预期结果?

可以得到,%d\%d%d会自动寻找整数。

实验B2:在不同两行输入12和2,是否得到预期结果

可以得到,道理同上,该行没有会自动读下一行。

实验B3:在B1和B2中,在12和2的前面和后面插入大量的空格或\t,甚至插入空行

一样可以得到正确的结果。

实验B4:把2换成字符s,重复实验B1~B3

其实换成字符s和打空格没有本质区别,都是一个字符。可以正常输出12,但第二个值就是未定义的了。

思考:如何输出%和d两个字符?

printf("%%d\n");

章末的问题

1. int型整数的最小值和最大值?

-2147483648和2147483647。

2. double型浮点数能精确到多少位小数?或者,这个问题本身值得商榷?

这个问题值得商榷,因为double的精度和前面阶码的大小有关。数据的绝对值越大,精度就越低。

3. double型浮点数最大整数值和最小正数值分别是多少,不必特别精确

如果采用IEEE浮点表示,最小正数是最小的非规格化数,本应该是2−52∗2−10222^{-52}\ast2^{-1022}2−52∗2−1022,但结果却是2的负三百多次方,可能标准变了。。总之差不多在2的几百次方左右。

4.逻辑运算符号“&&”、“||”和“!”的优先级?

查表可知优先级关系是!>&&>∣∣!>\&\&>||!>&&>∣∣。

5. if(a) if(b) x++; else y++; else和哪个if配套?

尽管说else匹配的是最近的if,但严格说来应该是同一代码块中最近的if。上述语句等价于

if(a){if(b){x++;}else{y++;}
}

所以配之前的一个。不过这么写代码的也真是牛逼!

【紫书】第一章实验+问题相关推荐

  1. 西瓜书第一章阅读笔记

    西瓜书第一章阅读笔记 第一章 绪论 1.机器学习基本术语 2.归纳偏好 3.所有学习算法一样优秀? 4.补充资料 第一章 绪论 1.机器学习基本术语 记录:对一个事件或对象的描述,也称为"示 ...

  2. 西瓜书第一章课后习题答案

    第1章 绪论 1.1 略 1.2 参考链接:西瓜书第一章习题 - 简书 (jianshu.com) 首先明确基本合取式有多少种,设西瓜的三个不同属性的特征分别为(A1,A2),(B1,B2,B3),( ...

  3. 红宝书--第一章总结分享

    红宝书–第一章总结分享 作为一名前端开发者,我想很有必要认真阅读业界大佬的著作,这不仅能拓展认知,更能发现曾经的遗漏点和误区.为了激励自己能坚持阅读完,特在此分享自己的品读总结. 菜鸟也会变成老鸟~为 ...

  4. python矩阵乘法_鱼书——第一章 Python入门

    one 第一章 1.1 Python是什么 Python是一个简单.易读.易记的编程语言,而且是开源的,可以免费地自由使用.Python可以用类似英语的语法编写程序,编译起来也不费力,因此我们可以很轻 ...

  5. 手撕龙书 第一章 认识编译器

    编译原理 编译的原理 什么叫编译? 编排和翻译. 编排什么? 编排人理解的语言. 翻译成什么? 翻译成机器能理解的语言. 根据以上, 所以 编译=高级编程语言–>中间代码–>最终的机器语言 ...

  6. [OpenGL红宝书]第一章 OpenGL概述

    第一章 OpenGL概述 标签(空格分隔): OpenGL 第一章 OpenGL概述 1 什么是OpenGL 2 初识OpenGL程序 3 OpenGL语法 4 OpenGL渲染管线 41 准备向Op ...

  7. 蘑菇书 第一章绪论 习题

    强化学习的基本结构是什么? 强化学习本质上是智能体和环境的交互过程.具体来说,就是智能体根据所观测到的环境的状态输出一个动作或者决策作用在环境上,同时环境会输出下一个状态和奖励.智能体就是想要获得最大 ...

  8. Windows游戏编程大师技巧第二版学习笔记之第一章 实验补充

    前面记录的一下看书中的重点,编程还是要动手,下面就来动手试试,这里选择VC6.0编译器 这里先来配置游戏编程环境,原书中的dx81sdk_full.exe一共是1百多MB,其实没必要整那么多,看我在我 ...

  9. 机器学习西瓜书第一章总结

    机器学习:研究如何通过计算的手段,利用     经验改善系统自身的性能. 1.训练模型   数据集:一组数据记录的集合.   实例或样本:每条记录是关于一个事件或对      象的描述.   属性:反 ...

最新文章

  1. android c聊天功能,Android实现简单C/S聊天室应用
  2. 《为什么我们的决策总出错》摘录
  3. 地址引用PHP,浅谈PHP变量作用域以及地址引用问题
  4. MySQL--区分表名大小写
  5. mybatis学习笔记(2)两种配置实现增删改查
  6. scala spark 埋点统计_spark—1:WordCount(Python与Scala对照)
  7. 【渝粤教育】电大中专公共基础课程_1作业 题库
  8. SpringMVC中JSON处理
  9. cf(聚簇因子)调优,计划调优,SQL改造
  10. 如何让测试同学理解并发锁
  11. 北美+德国18所名校数据科学课程汇总
  12. python和pytorch关系_pytorch 模拟关系拟合——回归实例
  13. SpringBoot+Element-UI实现加载ActiveX控件
  14. php微信商城 源代码下载,微信商城(B2C)独立后台版 php版 v1.0
  15. linux kernel pwn学习之堆漏洞利用+bypass smap、smep
  16. C# 之 ZipOutPutStream 压缩文件
  17. 商品历史价格查询网站分享
  18. 仿小米商城网: 项目启动
  19. 清理 Anaconda 的 pkgs
  20. mybaties学习笔记

热门文章

  1. nvme固态硬盘安装win10填坑记
  2. localStorage在Safari浏览器无痕模式下失效
  3. The development history and future trend of optical fiber communication technology
  4. VUE+WebPack游戏设计:欲望都市城市图层的设计
  5. 计算机云的使用方法,云电脑教程:云电脑怎么用?
  6. 计算机操作系统 - 目录
  7. 互联网摸鱼日报(2022-12-21)
  8. mysql 安时间查询格式_安装MySQL慢查询日志工具Anemometer
  9. python替换列表中元素_python中关于元素替换的一些总结
  10. MT25QL128/MTQL256_FLASH驱动——基于华大单片机