英语法语西班牙文

OnWorks 网站图标

PDL::BadValuesp - 云端在线

在 OnWorks 免费托管服务提供商中通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器运行 PDL::BadValuesp

这是命令 PDL::BadValuesp 可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


PDL::BadValues - 讨论 PDL 中的错误值支持

商品描述


什么是 旨在 价值观 为什么 应该 I - 他们?
有时能够指定某个值是“坏的”或“缺失的”很有用; 为了
天文学中使用的示例 CCD 产生的 2D 图像并不完美,因为某些区域
由于检测器的缺陷而包含无效数据。 虽然 PDL 的强大索引
例程和所有带有数据流、切片等的复杂业务意味着这些
处理中可以忽略区域,这样做很尴尬。 会容易得多
能够说“$c = $a + $b”并将所有麻烦留给计算机。

如果你对此不感兴趣,那么你可能(正确地)关心这个
影响 PDL 的速度,因为在每个操作中检查错误值的开销
可以很大。 正因为如此,代码被写得尽可能快——
特别是在操作不包含错误值的 piddle 时。 事实上,你
使用没有的 piddles 时,应该注意到基本上没有速度差异
包含错误的值。

但是,如果您不想要错误的值,那么 PDL 的“WITH_BADVAL”配置选项
前来救援; 如果设置为 0 或 undef,则将忽略错误值支持。 有关
只有在我认为你需要使用它的时候 - 我承认,我有偏见 ;) - 如果你有
有限的磁盘或内存空间,因为代码的大小增加了(见下文)。

您可能还会问“好吧,我的计算机支持 IEEE NaN,所以我已经有了这个”。 嗯,是
并且没有 - 许多例程,例如“y=sin(x)”,将在用户没有的情况下传播 NaN
以不同的方式编码,但诸如“qsort”之类的例程或查找数组的中位数,需要
被重新编码以处理错误的值。 对于浮点数据类型,“NaN”和“Inf”是
用于标记错误值 IF 选项“BADVAL_USENAN”在您的配置文件中设置为 1。
否则使用特殊值(默认错误值)。 我没有任何基准
看看哪个选项更快。

有一个实验性功能“BADVAL_PER_PDL”,如果设置,您可以拥有
相同类型的不同 piddles 的不同错误值。 这目前不起作用
使用“BADVAL_USENAN”选项; 如果两者都设置,则 PDL 将忽略“BADVAL_USENAN”
计算值。

代码 提高 价值观
下面的对比已经过时了!

在运行 Linux 和 Perl 386_5.005 的 i03 机器上,我测量了以下大小(
编译了 Slatec 代码,但没有其他选项:例如,FFTW、GSL 和 TriD
是):

与_BADVAL = 0
make 成功后 blib 目录的大小 = 4963 kb: blib/arch = 2485 kb 和
blib/lib = 1587 kb。

与_BADVAL = 1
make 成功后 blib 目录的大小 = 5723 kb: blib/arch = 3178 kb 和
blib/lib = 1613 kb。

所以,整体的增长是 仅由 15% - 不用为所有那些坏价值的奇迹付出太多
提供;)

用于此测试的源代码具有绝大多数核心例程(例如
Basic/) 转换为使用错误值,而很少有“外部”例程(即
PDL 发行版中的其他所有内容)都已更改。

A 简介
pdl> p $PDL::Bad::Status
1
pdl> $a = 序列(4,3);
pdl> p $a
[
[0 1 2 3]
[4 5 6 7]
[8 9 10 11]
]
pdl> $a = $a->setbadif( $a % 3 == 2 )
pdl> p $a
[
[ 0 1 坏 3]
[ 4 坏 6 7]
[坏 9 10 坏]
]
pdl> $a *= 3
pdl> p $a
[
[ 0 3 坏 9]
[ 12 坏 18 21]
[坏 27 30 坏]
]
pdl> p $a->sum
120

perldl 或 pdl2 中的“demo bad”和“demo bad2”给出了一些
值不好的事情是可能的。 这些也可在 PDL 的网站上获得,网址为
http://pdl.perl.org/demos/. 有关处理错误值的有用例程,请参阅 PDL::Bad
t/坏.t 看到他们的行动。

目的是:

· 对于不需要不良价值支持的用户,不会显着影响 PDL

· 在安装了不良价值支持时尽可能快

如果您从不想要错误的值支持,那么您可以将“WITH_BADVAL”设置为 0 配置文件; 数据链路层
then 没有编译错误的值支持,所以会像以前一样快。

但是,在大多数情况下,错误的值支持对速度的影响可以忽略不计,因此您
应该将“WITH_CONFIG”设置为1! 一个例外是如果您的内存不足,因为数量
生成的代码更大(但仅增加了约 15% - 请参阅“由于错误而增加的代码
值”)。

要查明 PDL 是否使用错误的值支持编译,请查看以下任一值
$PDL::Config{WITH_BADVAL} 或 $PDL::Bad::Status - 如果为真,则为真。

要确定例程是否支持错误值,请使用 perldl 或 pdl2 中的“badinfo”命令
或 pdldoc 的“-b”选项。 该设施目前是“概念证明”(或者,更多
实际上,一个快速的黑客)所以期望它的边缘是粗糙的。

每个 piddle 包含一个标志 - 可通过“$pdl->badflag”访问 - 说明是否有任何标志
存在错误数据:

· 如果 假/0,这意味着这里没有坏数据,“代码”提供的代码
执行“pp_def()”选项。 这意味着速度应该非常接近
使用“WITH_BADVAL=0”获得的,因为唯一的开销是多次访问
在 piddles 状态变量中的位。

· 如果 真/1,那么这里说 五月 是piddle中的坏数据,所以使用中的代码
“BadCode”选项(假设此例程的“pp_def()”已更新为
有一个 BadCode 键)。 您可以获得线程的所有优点,就像“代码”一样
选项,但它会运行得更慢,因为您将不得不处理
坏的价值观。

如果你创建一个 piddle,它的 bad-value 标志将被设置为 0。要改变它,使用
"$pdl->badflag($new_bad_status)",其中$new_bad_status可以是0或1。当一个例程
创建一个 piddle,它的坏值标志将取决于输入 piddles:除非被覆盖
(请参阅“pp_def”的“CopyBadStatusCode”选项),如果
任何输入 piddles 都包含错误的值。 检查 piddle 是否真的包含坏的
数据,使用“check_badflag”方法。

注意: badflag 的传播

如果您更改了 piddle 的 badflag,则此更改将传播到所有 孩子
拨弄,所以

pdl> $a = zeroes(20,30);
pdl> $b = $a->slice('0:10,0:10');
pdl> $c = $b->slice(',(2)');
pdl> 打印 ">>c: ", $c->badflag, "\n";
>>c: 0
pdl> $a->坏旗(1);
pdl> 打印 ">>c: ", $c->badflag, "\n";
>>c: 1

没有 改变了一个 piddle 的父母,所以

pdl> 打印 ">>a: ", $a->badflag, "\n";
>>a: 1
pdl> $c->坏旗(0);
pdl> 打印 ">>a: ", $a->badflag, "\n";
>>a: 1

思考:

· badflag 只能在 piddle 没有父级时清除,并且此更改将
传播给那个piddle的所有孩子。 我不再那么热衷于此了(太
难以编码,例如)。

· "$a->坏旗(1)" 应该将 badflag 传播给父母和孩子。

这应该不难实现(尽管最初的尝试失败了!)。 是否使
有道理吗? 还有一个问题是如果你改变了一个的 badvalue 会发生什么
piddle - 这些是否应该传播给孩子/父母(是)或者你是否应该只
能够在“顶级”级别更改 badvalue - 即那些没有的 piddles
父母。

“orig_badvalue()”方法返回给定数据类型的编译时值。 有用
在 piddles、PDL::Type 对象和数字上 - 例如

$pdl->orig_badvalue(), byte->orig_badvalue(), 和 原始坏值(4)。

它还有一个可怕的名字......

要获取当前的错误值,请使用“badvalue()”方法 - 它的语法与
“orig_badvalue()”。

要更改当前的坏值,请将新数字提供给 badvalue - 例如

$pdl->badvalue(2.3), 字节->不良价值(2)、badvalue(5,-3e34)。

备注: 该值被静默转换为正确的 C 类型,并返回 - 即
“byte->badvalue(-26)” 在我的 Linux 机器上返回 230。 它也是浮动的“nop”-
“BADVAL_USENAN”为真时的点类型。

请注意,对错误值的更改是 不是 传播到以前创建的 piddles - 他们
仍然会设置错误的值,但突然间错误的元素将变成
'good',但包含旧的 bad 值。 见下面的讨论。 这不是问题
使用 NaN 的浮点类型,因为你不能改变它们的坏值。

价值观 布尔 运营商
对于 PDL::Ops 中的那些布尔运算符,对错误值的评估返回错误值。
虽然这意味着

$mask = $img > $thresh;

正确传播错误的值,它 导致检查问题,例如

do_something() 如果有的话( $img > $thresh );

需要重写为类似的东西

do_something() 如果有的话( setbadtoval( ($img > $thresh), 0 ) );

在 PDL::Ufunc 中使用“投影”函数之一时 - 例如 orover - 错误值
被跳过(请参阅这些函数的文档以了解当前(不良)处理
所有元素都不好的情况)。

A 折扣值 拨弄, 有关 问题
An 试验 选项“BADVAL_PER_PDL”已添加到 配置文件 允许 per-piddle
坏的价值观。 文档尚未更新以说明此更改。

以下内容仅与整数类型相关,如果是浮点类型,则
构建 PDL 时未设置“BADVAL_USENAN”。

目前,每种数据类型都有一个错误值。 编写代码是为了让我们可以
每个 piddle 都有一个单独的坏值(存储在 pdl 结构中) - 这将
删除当前的问题:

pdl> $a = byte( 1, 2, byte->badvalue, 4, 5);
pdl> p $a;
[1 2 255 4 5]
pdl> $a->坏旗(1)
pdl> p $a;
[1 2 坏 4 5]
pdl> 字节->不良价值(0);
pdl> p $a;
[1 2 255 4 5]

即 $a 中的坏值已经失去了它的价值 使用当前实现的状态。 它会
不过几乎肯定会在其他地方引起问题!

实施 详细信息


在“perl Makefile.PL”期间,文件 基本/核心/badsupport.p 被建造; 这个文件
包含“WITH_BADVAL”、“BADVAL_USENAN”和“BADVAL_PER_PDL”变量的值,
并且应该由在执行之前执行的代码使用 PDL::配置 创建文件(例如
基本/核心/pdlcore.c.PL. 但是,大多数 PDL 代码只需要访问 %PDL::Config
数组(例如 基本/坏/坏.pd) 以查明是否需要不良值支持。

一个新标志已添加到 piddle 的状态 - “PDL_BADVAL”。 如果未设置,则
piddle 不包含错误值,因此可以忽略所有支持代码。 如果设置,它
不保证存在错误值,只是应该检查它们。
感谢 Christian,“badflag()”——它设置/清除这个标志(见 基本/坏/坏.pd) -
会更新 全部 piddle 的子/孙/等,如果它的状态发生变化(见
“坏旗”在 基本/坏/坏.pd 和“propagate_badflag” 基本/核心/Core.xs.PL)。 它不是
明确如何处理父母:我可以看到传播“设置错误标志”的原因
向父母提出要求,但我认为孩子不应该能够清除
父母。 还有一个问题是当你改变一个错误的值时会发生什么
拨弄。

“pdl_trans”结构已扩展为包括一个整数值“bvalflag”,它
作为一个开关来告诉代码是否处理错误的值。 此值已设置
如果任何输入 piddles 设置了“PDL_BADVAL”标志(尽管此代码可以
替换为在 pp_def 中设置“FidBadStateCode”)。 检查的逻辑将得到
如果我允许例程回退到使用“代码”部分
浮点类型(即当“BADVAL_USENAN”为“NoBadifNaN => 1”时的那些例程
真的)。

整数类型的错误值现在存储在 Core PDL 中的结构中
结构 - “PDL.bvals”(例如 基本/核心/pdlcore.h.PL); 另见“typedef badvals”
基本/核心/pdl.h.PL 和 BOOT 代码 基本/核心/Core.xs.PL 值在哪里
初始化为(希望)合理的值。 看 PDL/坏/坏.pd 用于读/写例程
价值。

“BADVAL_PER_PDL”选项的添加导致对
piddles 的内部结构。 这些更改尚未记录。

为什么 而不去 使 a PDL 子类?
对错误值的支持可以作为 PDL 子类来完成。 这样做的好处
方法是,如果你真的想要,你只加载代码来处理错误的值
使用它们。 缺点是代码会被分离:任何错误
必须对两个不同文件中的代码进行修复/改进。 与现在
接近代码在同一个“pp_def”函数中(虽然仍然存在问题
“代码”和“错误代码”部分都需要更新)。

默认 价值观
默认/原始错误值设置为(取自 Starlink 发行版):

#包括

PDL_Byte == UCHAR_MAX
PDL_Short == SHRT_MIN
PDL_Ushort == USHRT_MAX
PDL_Long == INT_MIN

如果“BADVAL_USENAN == 0”,那么我们也有

PDL_Float == -FLT_MAX
PDL_Double == -DBL_MAX

否则所有的“NaN”、“+Inf”和“-Inf”都被认为对浮点类型不利。
在这种情况下,与整数类型不同,不能更改错误值。

创新中心 do I 更改 a 常规 处理 价值观?
例子可以在大多数 *.PD 在文件 基本的/ (希望有更多的地方
很快!)。 有些逻辑可能看起来有点不清楚 - 那可能是因为它是!
评论赞赏。

所有例程都应自动将错误状态标志传播到输出 piddles,除非
你另有声明。

如果例程明确处理错误值,则必须向 pp_def 提供此选项:

处理坏 => 1

这确保为 $ISBAD 等宏初始化正确的变量。 这是
也被自动文档创建例程用于提供有关的默认信息
用户不必自己键入例程的不良价值支持(这是
处于早期阶段)。

要将例程标记为不处理错误值,请使用

处理坏 => 0

本篇 应该 如果例程发送了任何带有错误的信息,则会导致例程打印警告
标志设置。 Primitive 的 "intover" 有这个设置——因为转换起来会很尴尬——
但我没有试过它是否有效。

如果您想处理错误值但不想设置所有输出 piddles 的状态,或者如果
重要的只有一个输入piddle,然后看PP规则
“NewXSFindBadStatus”和“NewXSCopyBadStatus”以及相应的“pp_def”选项:

查找不良状态码
默认情况下,“FidBadStatusCode”创建的代码设置“$PRIV(bvalflag)”取决于
输入 piddles 的错误标志的状态:参见“findbadstatus”
基本/发电/PP.pm. 用户定义的代码还应该将“bvalflag”的值存储在
“$BADFLAGCACHE()”变量。

复制错误状态代码
这里的默认代码比“FidBadStatusCode”简单一点:坏标志
如果在代码完成后“$BADFLAGCACHE()”为真,则设置输出小节
评估。 有时“CopyBadStatusCode”设置为空字符串,
将输出 piddle 的 badflag 设置为“BadCode”的责任
部分(例如“xxxover”例程 基本/原始/原始.pd).

在 PDL 2.4.3 之前,我们使用“$PRIV(bvalflag)”而不是“$BADFLAGCACHE()”。 这是
危险,因为“$PRIV()”结构在此时不能保证有效
编码。

如果您有一个想要就地使用的例程,请查看
坏.pd (或 操作文件) 使用“就地”选项来查看坏标志是如何传播的
使用“xxxBadStatusCode”选项的儿童。 我决定不将其作为规则自动化
会有点复杂,因为并非每个就地操作都需要传播 badflag
(例如一元函数)。

如果是选项

处理坏 => 1

被给予,那么很多事情就会发生。 对于整数类型,readdata 代码自动
创建一个名为“的变量_badval”,其中包含该错误的值
piddle(参见“get_xsdatapdecl()” 基本/Gen/PP/PdlParObjs.pm)。 但是,不要硬编码
将此名称添加到您的代码中! 而是使用宏(感谢 Tuomas 的建议):

'$ISBAD(a(n=>1))' 扩展为 '$a(n=>1) == a_badval'
'$ISGOOD(a())' '$a() != a_badval'
'$SETBAD(bob())' '$bob() = bob_badval'

好吧,“$a(...)”也被扩展了。 此外,您可以在 pdl 名称前使用“$”,如果
您希望如此,但它开始看起来像线路噪音 - 例如“$ISGOOD($a())”。

如果你在一个变量中缓存一个 piddle 值——例如“索引” 切片.pd - 下列
例程很有用:

'$ISBADVAR(c_var,pdl)' 'c_var == pdl_badval'
'$ISGOODVAR(c_var,pdl)' 'c_var != pdl_badval'
'$SETBADVAR(c_var,pdl)' 'c_var = pdl_badval'

已经介绍了以下内容,他们可能需要玩弄以提高他们的
使用。

'$PPISBAD(CHILD,[i]) 'CHILD_physdatap[i] == CHILD_badval'
'$PPISGOOD(CHILD,[i]) 'CHILD_physdatap[i] != CHILD_badval'
'$PPSETBAD(CHILD,[i]) 'CHILD_physdatap[i] = CHILD_badval'

如果设置了 "BADVAL_USENAN",那么 "float" 和 "double" 有点不同,我们在这里
认为“NaN”、“+Inf”和“-Inf”都是不好的。 在这种情况下:

ISBAD 变为有限(piddle) == 0
ISGOOD 有限(piddle) != 0
设置 piddle = NaN

其中 NaN 的值在下面的处理 NaN 值中讨论。

这一切都意味着你可以改变

代码 => '$a() = $b() + $c();'



错误代码 => 'if ( $ISBAD(b()) || $ISBAD(c()) ) {
$SETBAD(a());
} {
$a() = $b() + $c();
}'

保持代码不变。 PP::PDLCode 然后会创建一个类似的循环

如果(__trans->bvalflag){
BadCode 上的线程循环
} {
代码上的线程循环
}

(可能更容易查看 .xs 文件以查看发生了什么)。

我要参加 以外 代码 部分
与“BadCode”类似,还有“BadBackCode”和“BadRedoDimsCode”。

处理“EquivCPOffsCode”有点不同:假设唯一访问
数据是通过“$EQUIVCPOFFS(i,j)”宏,然后我们可以自动创建'坏'
它的版本; 请参阅 PDL::PP 中的“[EquivCPOffsCode]”和“[Code]”规则。

ACCESS of a iddle
已提供宏以提供对 pdl 的错误标志状态的访问:

'$PDLSTATEISBAD(a)' -> '($PDL(a)->state & PDL_BADVAL) > 0'
'$PDLSTATEISGOOD(a)' '($PDL(a)->state & PDL_BADVAL) == 0'

'$PDLSTATESETBAD(a)' '$PDL(a)->状态 |= PDL_BADVAL'
'$PDLSTATESETGOOD(a)' '$PDL(a)->state &= ~PDL_BADVAL'

要在“xxxxBadStatusCode”(+进入 INIT: 部分的其他内容)中使用,有:

'$SETPDLSTATEBAD(a)' -> 'a->state |= PDL_BADVAL'
'$SETPDLSTATEGOOD(a)' -> 'a->state &= ~PDL_BADVAL'

'$ISPDLSTATEBAD(a)' -> '((a->state & PDL_BADVAL) > 0)'
'$ISPDLSTATEGOOD(a)' -> '((a->state & PDL_BADVAL) == 0)'

在 PDL 2.4.3 中,引入了“$BADFLAGCACHE()”宏以用于“FidBadStatusCode”和
“复制错误状态代码”。

处理 为NaN 价值观
有两个问题:

NaN 作为坏值
完成了。 要选择,在 perldl.conf 中将“BADVAL_USENAN”设置为 1; 0 值下降
回到将浮点类型与整数一样对待。 我需要做一些
基准测试,看看哪个更快,以及它是否依赖于机器(Linux 似乎
在我所做的一些非常简单的测试中比我的 Sparc 机器慢得多)。

忽略 BadCode 部分
这是 而不去.

对于 简单 处理浮点数的例程,我们应该让计算机处理
错误值(即“NaN”和“Inf”值)而不是使用“BadCode”中的代码
部分。 许多这样的例程已经被标记为“NoBadifNaN => 1”; 然而这是
目前 忽视 通过 PDL::PP。

对于这些例程,我们希望使用“代码”部分,如果

piddle 没有设置坏标志
数据类型是 float 或 double

否则我们使用“BadCode”部分。 这是 不是 实施的,因为它需要
PP::PDLCode 的合理破解!

还有一个问题是我们如何处理“异常”——因为 "$a = pdl(2)/ pdl(0)”
产生一个错误的值,但不更新 piddle 的 badflag 值。 我们能不能抓住一个
异常,或者我们是否必须为此陷入困境(例如在
基本/Ops/ops.pd)?

检查“Nan”和“Inf”是通过使用“finite()”系统调用完成的。 如果你想
将值设置为“NaN”值,可以使用以下代码位(这可以找到
同时 基本/核心/Core.xs.PL基本/坏/坏.pd):

/* 对于大端机器 */
静态联合{无符号字符__c[4]; 浮动__d; }
__pdl_nan = { { 0x7f, 0xc0, 0, 0 } };

/* 对于小端机器 */
静态联合{无符号字符__c[4]; 浮动__d; }
__pdl_nan = { { 0, 0, 0xc0, 0x7f } };

这种方法可能应该被库例程替换,例如“nan("")”或
“atof(“NaN”)”。

要找出特定机器是否为大端,请使用例程
“PDL::Core::Dev::isbigendian()”。

什么是 关于我们 文件?


PDL 的优势之一是其在线文档。 目的是利用这个系统
提供有关例程如何/是否支持错误值的信息:在许多情况下,“pp_def()”
无论如何都包含所有信息,所以函数编写者不需要做任何事情
全部! 对于这还不够的情况,有“BadDoc”选项。 对于代码
在 Perl 级别编写 - 即在 .pm 文件中 - 使用“=for bad”pod 指令。

此信息将通过 man/pod2man/html 文档提供。 这也是
可以从“perldl”或“pdl2”外壳访问——使用“badinfo”命令——以及
“pdldoc”shell 命令 - 使用“-b”选项。

这种支持处于非常早期的阶段 - 即没有太多考虑:评论
受欢迎的; 首选代码的改进;) 一个尴尬的问题是 *。下午 码:
你必须写一个 *.pm.PL 仅插入“=for bad”指令(+ 文本)的文件,如果
坏值支持被编译进来。事实上,在处理坏值时,这是一个痛苦的过程。
Perl,而不是 PDL::PP,级别:也许我应该放弃“WITH_BADVAL”选项......

当前 问题


有许多领域需要工作、用户输入,或两者兼而有之! 他们被提到
本文档的其他地方,但这只是为了确保它们不会丢失。

补漏 无效 数学的 操作
我们是否应该向“PDL::Ops”中的函数添加异常以将输出设置为错误
范围输入值?

pdl> p log10(pdl(10,100,-1))

我希望上面产生“[1 2 BAD]”,但这会减慢对 所有
提单。 我们可以在操作后检查“NaN”/“Inf”值,但我怀疑
会更快。

之路 - 为NaN
当 "BADVAL_USENAN" 为 true 时,"PDL::Ops" 中的例程应该直接通过
“代码”部分——即不要使用“BadCode”——用于“float”和“double”数据类型。

全球 而不是 每一个 价值观
我认为所需要的只是更改“Basic/Core/pdlconv.c.PL”中的例程,尽管
肯定会有并发症。 这也意味着 pdl 结构需要
有一个变量来存储它的坏值,这意味着二进制不兼容
早期版本的 PDL 具有错误的价值支持。

截至 17 年 2006 月 XNUMX 日,PDL 包含 试验 “BADVAL_PER_PDL”配置选项
如果选择它,则会添加 per-piddle 错误值。

数据流 of 坏旗
目前对 bad flag 的更改会传播给 piddle 的孩子,但也许
它们也应该传递给父母。 随着 per-piddle bad 的出现
我们需要考虑如何处理用于表示坏项目的值的变化
了。

EVERYTHING ELSE


构建过程受到了影响。 现在在构建过程中创建了以下文件:

基本/核心/pdlcore.h pdlcore.h.PL
pdlcore.c pdlcore.c.PL
pdlapi.c pdlapi.c.PL
核心.xs 核心.xs.PL
核心.pm 核心.pm.PL

添加了几个新文件:

Basic/Pod/BadValues.pod(即这个文件)

t/坏.t

基本/差/
基本/坏/Makefile.PL
坏.pd

等。

待办事项/建议


· 看看使用 per-piddle 的错误值。 将意味着更改 pdl 结构(即
二进制不兼容)和“Basic/Core/pdlconv.c.PL”中的例程需要
改变来处理这个。 大多数其他例程 应该 而不去 需要改变...

查看 试验 “BADVAL_PER_PDL”选项。

· 如何处理“$b = pdl(-2); $a = log10($b)” - $a 应该设置为错误,但它
目前不是。

· 当使用 NaN 作为参数时,允许 PDL::Ops 中的操作跳过对错误值的检查。
错误的值并处理浮点数。 需要相当多的工作才能
PDL::PP::PDL 代码。

· "$pdl->baddata()" 现在也会更新这个 piddle 的所有孩子。 然而,不
确定如何对待父母,因为:

$b = $a->slice();
$b->坏数据(0)

并不意味着 $a 不应该清除它的坏值。 然而,经过

$b->坏数据(1)

假设父母现在被标记为包含错误值是明智的。

如果你不是另一个孩子的孩子,也许你只能清除错误的价值标志
piddle,而如果你设置了标志,那么所有的孩子和父母都应该被设置为
好?

同样,如果您更改了 piddle 中的错误值,是否应该将其传播到
父母和孩子? 或者你应该只能在“顶级”piddle上做到这一点?
讨厌...

· 设置一些代码来做基准测试,看看有多少事情变慢了(以及
如果“WITH_BADVAL”为 0/undef,请检查我是否没有搞砸)。

· 有些名字不吸引人——我在想“orig_badvalue()”
基本/坏/坏.pd 特别是。 任何建议表示赞赏。

使用 onworks.net 服务在线使用 PDL::BadValuesp


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad