c – 打印最大的单精度浮点数
发布时间:2020-12-16 09:55:26 所属栏目:百科 来源:网络整理
导读:我来寻求知识. 我想了解浮点数. 我试图弄清楚为什么,当我打印最大的浮点数时,它无法正确打印. 2-(2^-23) Exponent Bits1.99999988079071044921875 * (1.7014118346046923173168730371588e+38) = 3.4028234663852885981170418348451e+38 这应该是最大的单精度
我来寻求知识.
我想了解浮点数. 我试图弄清楚为什么,当我打印最大的浮点数时,它无法正确打印. 2-(2^-23) Exponent Bits 1.99999988079071044921875 * (1.7014118346046923173168730371588e+38) = 3.4028234663852885981170418348451e+38 这应该是最大的单精度浮点数: 340282346638528859811704183484510000000.0 所以, float i = 340282346638528859811704183484510000000.0; printf(TEXT,"Float %.38f",i); Output: 340282346638528860000000000000000000000.0 很明显这个数字正在四舍五入,所以我试图找出究竟发生了什么. 我的问题是: 存储在浮点寄存器中的数字是否为0 22222111 22222222222222222222111并且显示不正确? 如果我写printf(TEXT,“Float%.38f”,FLT_MAX);,我得到相同的答案. 我理解错误与计算,但我不明白为什么数字 也许Mantissa * Exponent导致计算错误?如果这是真的,那么340282346638528860000000000000000000000.0将是可以忠实地表示而没有计算错误的最大数字.我想那是有道理的.只需要一个祝福. 谢谢, 解决方法
看起来罪魁祸首是printf()(我猜因为float在传递给它时会隐式转换为double):
#include <iostream> #include <limits> int main() { std::cout.precision( 38 ); std::cout << std::numeric_limits<float>::max() << std::endl; } 输出是: 3.4028234663852885981170418348451692544e+38 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |