填空:类型转换2

GitHub跳转原题关系图返回列表

由第九位小数能否保留判断 a 为 double、b 为 float。

OJ: noi_openjudge

题目 ID: ch0102-05

难度:入门

标签:浮点数类型转换python

日期: 2026-07-30 23:01

题意

根据赋值前后 1.000000001 的第九位小数是否还存在,判断两个 C/C++ 变量的类型。

思路

a 输出时仍保留 1.000000001,需要双精度 double,对应选项 F。赋值给 b 后输出为 1.000000000,说明单精度 float 的有效精度不足以区分这一微小差异,故 b 对应 E

Python 的 float 通常就是双精度,不能用它直接演示 C++ 单精度丢失;本题要求的是类型选项,直接输出 F E

代码

Python代码

python
# a 保留第 9 位小数需要 double,b 转成 float 后该位丢失。
print("F E")

C++代码

这里保留原有的 C++ 参考实现。

cpp
/* 
 * short 2
 * 16bit
 * 0111111111111111
 * 32768
 * 1000000000000000
 * */
#include <bits/stdc++.h>
using namespace std;
int main(){
    printf("F E");
    return 0;
}

复杂度

时间复杂度和额外空间复杂度均为 O(1)O(1)

总结

浮点赋值可能因精度不同而改变值。观察变化发生在赋值前还是赋值后,可以反推出两个变量的精度。