【问题标题】:How to convert -1x10^200 to IEEE 754 double precision如何将 -1x10^200 转换为 IEEE 754 双精度
【发布时间】:2018-11-11 01:12:58
【问题描述】:
就像上面一样,我想找到 -1x10^200 的 IEEE 754 表示。
我知道我们可以得到符号为 1,因为我们有一个负数。但是我不确定如何找到尾数/指数。我最初的想法是将 10^200 转换为 2^x。但是 x 不是整数。所以我认为我们需要通过以某种方式分离 10^200 以某种方式得到一个分数。理论上可以使用很长的除法,但我正在寻找一个更优雅的答案,无需高精度计算器即可完成。
【问题讨论】:
标签:
c++
floating-point
binary
double
ieee-754
【解决方案1】:
-10200 不能以 IEEE-754 基本 64 位二进制格式表示。可表示的最近数为-99999999999999996973312221251036165947450327545502362648241750950346848435554075534196338404706251868027512415973882408182135734368278484639385041047239877871023591066789981811181813306167128854888448。 P>
64 位格式的编码是 0xe974e718d7d7625a。它的符号为 -(在位 63 中编码为 1),指数为 664(在位 62 到 52 中编码为 1687 或 0x697),有效位为 0x1.4e718d7d7625a(在位 51 到 0 中编码为 0x4e718d7d7625a)。
鉴于指数为 664,您可以通过将 10200 除以 2664 找到有效数字,将结果写入二进制,并在 52 位后四舍五入小数点。或者,除以 2664 后,乘以 252 并舍入为整数。