一个奇怪的打印功能错误
A strange print function bug
我正在研究一个 InterviewStreet 问题 https://www.interviewstreet.com/challenges/dashboard/#problem/4fcf919f11817,算法是正确的,但我仍然得到几个错误的答案,几个小时后我发现问题与打印功能有关:
void printHalf(int64_t x) {
if (x % 2 == 0)
printf("%lldn", x / 2L);
else
printf("%lld.5n", x / 2L);
}
此函数采用 64 位整数,并打印其一半。如果我将此函数更改为以下代码,则我的解决方案适用于所有测试用例:
void printHalf(int64_t x) {
if (x % 2 == 0)
printf("%lldn", x / 2L);
else
printf("%.1fn", x / 2.0);
}
这对我来说看起来有点奇怪,因为在我看来这两个函数具有相同的结果。
您的第一个版本无法正确处理值-1
。如果你运行printHalf(-1)
它会打印0.5
,因为它不知道它需要显示-0
而不是0
。
对于其他负值,它将在 C++11 中正常工作,但依赖于 C++03 中实现定义的行为(C++03 标准未指定负数的除法如何舍入)。
第二个版本也可能打印不正确的结果:如果值非常大,转换为浮点数将降低精度(因为双精度浮点数不能准确地表示所有 64 位整数),因此结果可能会偏差一点。
相关文章:
- 打印功能无法正常工作 - 链表
- 阵列打印功能
- 为什么我的打印功能不起作用?链表
- 为什么我的打印功能之一删除节点
- 打印功能不会终止
- 如何正确格式化此打印功能
- 使用for_each从对象列表中调用打印功能
- 打印功能的地址..声明
- 作为参数传递的打印功能指针导致屏幕上打印"1"
- 无效打印功能错误
- 尽管具有打印功能,但我的矢量无法打印
- 我在双链表上的此打印功能时遇到问题
- 二进制树级别明智的打印功能不起作用
- 需要使班级(long_number)用构造函数和一个打印功能代表1到60的任何长度
- 我的链接列表打印功能进入无限循环
- 一个人可以使用clang ast使用名称打印功能指针的质量
- 如何实现打印功能
- 如何禁用打印功能
- 一个奇怪的打印功能错误
- 为什么我的打印功能为我的Postfix程序产生此错误