为什么在下面的输出中将“ 32”添加到v的值?
int main()
{
float v = 9.999e8;
std::cout << "v --> " << v << std::endl;
std::cout << std::fixed;
std::cout << "v --> " << v << std::endl;
return 0;
}
输出:
v --> 9.999e+08
v --> 999900032.000000
^^
是打印值的伪像,还是不能以浮点数精确表示9.999e + 08?
将v更改为两倍可以解决该问题,但我想了解实际原因。
强文本
答案 0 :(得分:4)
使用` public function broadcastOn()
{
return new PrivateChannel('chat');
}
`
和IEEE 754 standard的通用桌面实现,只有24个有效位(和8个指数位)。这意味着在不损失精度的情况下,可以表示的最大连续值是2 24 ,大约是1.6E7(1.6•10 7 )。例如,这样的float
不能准确地表示高于此阈值的奇数值,因为最低有效的1位“掉落”了表示。
您的值约为1E9(10 9 ),是60倍。这意味着该值可以约为30 off(四舍五入到最接近的可表示值之后)。请注意,指数位贡献2 exp (无需仔细考虑偏移量),而不贡献10 exp 。
使用float
时有53位,足以容纳1E9(10 9 )。
答案 1 :(得分:2)
这是有限精度数学的本质。如果您尝试存储无法精确表示的值,那么充其量只能得到最接近的可表示值。
看看二进制文件:
999900032-> 111011100110010100001110000000
999900000-> 11101110011001010000110 11 00000
因此,准确表示此数字将需要两位额外的精度。大概是 <div id="dynamic_field">
<div class="row">
<div class="col s12" style="padding-top: 12px;">
<div class="col s12 m12 "><label for="title">Certificate Title</label>
<textarea class="materialize-textarea" style="padding: 0px;" id="title" name="title[]">Higher School Secondary Certificate</textarea>
</div>
<div class="col s12 m12 "><label for="title">School / College, City</label>
<textarea id="location" name="location[]" class="materialize-textarea" style="padding: 0px;"></textarea>
</div>
<div class="col s3 m3 "><label for="title">Marks</label>
<input id="marks" name="marks[]" type="text" value="" />
</div>
<div class="col s3 m3 "><label for="title">Division</label>
<input id="divsion" name="divsion[]" type="text" value="" placeholder="1st" />
</div>
<div class="col s3 m3 "><label for="title">Year</label>
<select id="year" name="year[]">
<option value="2019" selected>2019</option>
<option value="2018">2018</option>
<option value="2017">2017</option>
<option value="2016">2016</option>
<option value="2015">2015</option>
</select>
</div>
<div class="col s3 m3"><button type="button" name="addmoreEdu" id="addmoreEdu" class="btn btn-success pull-right" >Add More</button></div>
</div>
</div>
</div>
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
在您的系统上提供的。