gpt4 book ai didi

c - 确定浮点变量的当前精度/epsilon

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:26 27 4
gpt4 key购买 nike

我正在尝试以最小值分隔两个等值的 double 。上下文是一个事件模拟。我不希望事件同时发生,因此我将设置为发生新事件的时间增加了一个最小值。

(这很烦人,经常发生(自行实现的随机数生成器),所以我实际上需要进行探索,直到找到没有事件发生的时间。)

目前,我的代码想要做这样的事情(未测试,视为伪代码):

typedef struct event 
{
double time;
struct event* nexteventinqueue;
} event;
//insert newevent into the queue:
void add(event *newevent)
{
static event *firsteventinqueue = NULL;
if(firsteventinqueue == NULL)
{
firsteventinqueue = newevent;
return;
}
event *currentevent = firsteventinqueue;
event *temp;
//find an event point in the queue that does not precede the new event.
while((currentevent->time) < (newevent -> time))
{
temp = currentevent;
currentevent = currentevent->nexteventinqueue;
}
if(currentevent == NULL)//no such event found, so tag it onto the end.
{
temp->next = newevent;
return;
}
//handle coincidences by delaying the new event
while((currentevent->time) == (newevent->time))
{
double d = (maximally precise increment of a double precision floating point number);
while((currentevent->time) == (newevent.time)) //loop I want to get rid of
{
newevent.time += d;
d *= 2;
}
temp = currentevent;
currentevent = currentevent.nexteventinqueue;
}
temp.nexteventinqueue = newevent;
newevent.nexteventinqueue = currentevent;
return;
}

现在这有很多问题,但我想以某种方式摆脱中间的 while 循环。我的大部分时间甚至都没有接近双 float 可以达到的最大精度,所以从假设它们开始是浪费时间,而且因为我的 RNG 不是特别随机,所以这个循环必须执行相当经常。

有没有办法(1) 直接递增 double 浮点变量的小数部分,或者(2) 在小于 O(log(x)) 的时间内计算给定浮点变量 x 的精度?

最佳答案

使用 nextafter (来自 <math.h> )以获取 double 值之后的下一个最大值。 (或 nextafterf 表示单精度值)。

欲了解更多信息,man nextafter , 还有 available here.

关于c - 确定浮点变量的当前精度/epsilon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26902010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com