- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用以下代码从 FLT_MAX
计算 <float.h>
:
float increase(float a, float step)
{
float t = a, original = a;
while((t = a + step) > a)
{
a = t;
}
if(original == a)
{
printf(" %lf was not increased with %lf step \n", original, step);
return a;
}
printf(" %lf increased to %lf with %lf step \n", original, a, step);
return increase(a, step / 100.0);
}
void main()
{
printf("FLT_MAX : %f \n", FLT_MAX);
// compute:
increase(0.0, 10.0);
increase(0.0, 100.0);
increase(0.0, 10000.0);
increase(0.0, 100000000.0);
increase(0.0, 10000000000000000.0);
}
它输出:
FLT_MAX : 340282346638528860000000000000000000000.000000
0.000000 increased to 268435456.000000 with 10.000000 step
268435456.000000 was not increased with 0.100000 step
0.000000 increased to 2147483648.000000 with 100.000000 step
2147483648.000000 was not increased with 1.000000 step
0.000000 increased to 274877906944.000000 with 10000.000000 step
274877906944.000000 was not increased with 100.000000 step
0.000000 increased to 2251799813685248.000000 with 100000000.000000 step
2251799813685248.000000 was not increased with 1000000.000000 step
0.000000 increased to 302231454903657290000000.000000 with 10000000272564224.000000 step
302231454903657290000000.000000 was not increased with 100000000376832.000000 step
为什么在那些看起来还有空间的点上它会停止增加?看起来需要一些位操作才能获取 FLT_MAX
或者是否可以通过求和来获取它?谢谢!
最佳答案
原始代码在不同的地方停止,因为float
值是对数分布的并且具有有限的精度。 [1000000 到 2000000] 范围内的 float
值大约与 [0.0000001 到 0.0000002] 之间的值一样多。在某些时候,将一个小float
添加到一个大float
中并不能区分连续的float
值。
代码即将运行。
在 while 循环结束时,代码需要
1) 如果出现一些增加,请尝试更大的步骤
2) 如果步数不是太小(缺少),请尝试添加较小的步数,或者
3)返回
此外,步骤更改应该是一个小因子,例如 *2.0 或/2.0,而不是 100.0。添加了无穷大检测
#include <float.h>
#include <stdio.h>
float increase(float a, float step) {
fflush(stdout);
float t = a, original = a;
while ((t = a + step) > a) {
if (1.0f/t == 0.0f) break;
a = t;
}
if (original == a) {
printf(" %lf was not increased with %lf step \n", original, step);
if (step > 1.0) return increase(a, step / 2.0);
return a;
}
printf(" %lf increased to %lf with %lf step \n", original, a, step);
return increase(a, step * 2.0);
}
//void main() {
int main(void) {
printf("FLT_MAX : %f \n", FLT_MAX);
// compute:
increase(0.0, 10.0);
// increase(0.0, 100.0);
// increase(0.0, 10000.0);
// increase(0.0, 100000000.0);
// increase(0.0, 10000000000000000.0);
printf("FLT_MAX : %f \n", FLT_MAX);
return 0;
}
输出
FLT_MAX : 340282346638528859811704183484516925440.000000
0.000000 increased to 268435456.000000 with 10.000000 step
...
340282346638528859811704183484516925440.000000 was not increased with 0.625000 step
FLT_MAX : 340282346638528859811704183484516925440.000000
关于c - 为什么在通过求和计算 FLT_MAX 时 float 在某个时刻不会增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357258/
我可以访问财务结束日期,并需要根据该日期计算财务开始日期。 这就是我目前的逻辑。 moment('2017-03-31', 'YYYY-MM-DD').quarter() 会给我季度,在本例中为 1。
我想为我的网站构建一个小型日历系统。 当用户创建约会时,他可以在时间段(例如 3 月 3 日到 3 月 7 日)和具体的日期(例如 2016 年 3 月 3 日 11:00)之间进行选择。 我想将其插
我正在编写一个简单的脚本,它将输出特定时间的持续时间。我正在使用 moment 和 moment-duration-format 库 var timeStart = moment('2017-01-2
我在 Moment 中使用 fromNow,似乎得到了一些奇怪的结果。 var moment = require('moment'); var months = { Jan: '1', Feb
有人可以描述我为什么以下返回1 ? moment("2017-12-31").weeks() 但以下返回 52 ? moment("2017-12-30").weeks() 最佳答案 从文档: Bec
var firstDate=moment('Sat Jul 30 2016 00:00:00 GMT+0530 (India Standard Time)'); var secondDate=mome
例如,我有这个日期时间: 01:20:00 06-26-2014 我想减去这样的时间: 00:03:15 之后我想像这样格式化结果: 提前 3 小时 15 分钟。 如何使用 moment.js 做到这
考虑到这一点 http://jsfiddle.net/2a0hsj4z/4/ ,这里作为一个片段: moment.locale("en"); var start = moment("2010-10",
我设置了 3 个日期,开始、结束和今天。 let start_date = '20-06-2018', end_date = '20-06-2018', today = '20-06-2018' 但是
我正在使用 moment 来获取事件的时间,并使用 fromNow 功能 moment(value).fromNow(); 不过,这很有效,它告诉我4 天后。问题是,如果少于一天,则会显示4 小时内。
当我在 us-east-1 托管的 AWS lambda 中运行以下命令时 const currentTime = moment().utc().valueOf(); console.log(new
我正在尝试在我的 laravel 项目中使用 moment.js,而不是使用 vue,但仍然通过 npm 导入包。 我的 app.js 文件: require('moment/moment.js');
我正在寻找一种方法来包含 momentjs使用本地化(在我的例子中是德语),但不使用所有其他本地化(40kb 缩小版本),以保持 slim 。是否可以排除所有其他本地化,但一个特定的本地化? 最佳答案
我正在尝试使用 Moment.js 检测给定日期是否介于两个日期之间。从 2.0.0 版本开始,Tim 添加了 isBefore() 和 isAfter() 用于日期比较。 因为没有 isBetwee
我在 2 个 iso 字符串之间有 6 天的时间: const period = { start: "2020-07-19T22:00:00.000Z", end: "2020-07-25T22:00
我正在使用的后端 API 只能理解 +0000 格式的时区。 我目前得到当前格式的日期: “2017-12-20T16:39:31.000Z” 使用 moment.js 如何以以下字符串格式获取它?
我目前正在编写一个 ASP.NET 应用程序(在 SharePoint 中),该应用程序需要对表单中的字段执行验证。我目前正在寻找验证日期和时间的方法,其中包括比较两个日期时间(小于/大于)和验证格式
今天,我在 Easymock API 中遇到了这组看似有趣的期望设定者'and' 期望 setter :long、short、double、boolean、... 一个例子 public static
有没有办法使用 moment.js 或 moment-timezone 设置时区始终反射(reflect)“美国/纽约”,无论用户从何处访问应用程序? 我已经尝试过此操作,但对象的时区反射(refle
In the moment.js documentation给出了以下示例: moment.duration(1, "minutes").humanize(); // a minute moment.
我是一名优秀的程序员,十分优秀!