Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将-1x10^200转换为IEEE 754双精度_C++_Floating Point_Binary_Double_Ieee 754 - Fatal编程技术网

C++ 如何将-1x10^200转换为IEEE 754双精度

C++ 如何将-1x10^200转换为IEEE 754双精度,c++,floating-point,binary,double,ieee-754,C++,Floating Point,Binary,Double,Ieee 754,像上面一样,我想找到IEEE 754表示的-1x10^200 我知道符号可以是1,因为我们有一个负数。但是我不确定如何找到尾数/指数。我最初的想法是将10^200转换为2^x。然而,x不是一个整数。所以我想我们需要通过分离10^200得到一个分数。理论上可以使用很长的除法,但我正在寻找一个更优雅的答案,这个答案可以不用高精度的计算器来完成。−10200不能用IEEE-754基本64位二进制格式表示。可以表示的最接近的数字是-999999999999999697331225103616594745

像上面一样,我想找到IEEE 754表示的-1x10^200

我知道符号可以是1,因为我们有一个负数。但是我不确定如何找到尾数/指数。我最初的想法是将10^200转换为2^x。然而,x不是一个整数。所以我想我们需要通过分离10^200得到一个分数。理论上可以使用很长的除法,但我正在寻找一个更优雅的答案,这个答案可以不用高精度的计算器来完成。

−10200不能用IEEE-754基本64位二进制格式表示。可以表示的最接近的数字是-9999999999999996973312251036165947450327545502362648241750504175034684355540755341963384047062518680275124159738824081821357343682784639385041041077871023591066789981813306167128854888448

其64位格式的编码为0xe974e718d7d7625a。它有一种危险的迹象− (在位63中编码为1)、664的指数(在位62至52中编码为1687或0x697)和0x1.4e718d7d7625a的有效位(在位51至0中编码为0x4e718d7d7625a)

假设指数为664,则可以通过将10200除以2664,将结果写入二进制,并在基数点后的52位进行舍入来查找有效位。或者,在除以2664后,再乘以252并四舍五入为整数