小编ziv*_*rah的帖子

使用Haskell范围:为什么在一个范围内映射浮点函数会导致它返回一个额外的元素?

我知道漂浮物由于其不精确的性质而导致范围内的奇怪行为.我预计价值不精确的可能性.例如: [0.1,0.3..1]可能[0.1,0.3,0.5,0.7,0.8999999999999999]代替[0.1,0.3,0.5,0.7,0.9]

然而,除了精度损失之外,我还得到一个额外的元素:

ghci> [0.1,0.3..1]
[0.1,0.3,0.5,0.7,0.8999999999999999,1.0999999999999999]
Run Code Online (Sandbox Code Playgroud)

这很奇怪,但在这里解释.我想这样可以解决这个问题,我想:

ghci> [0.1,0.3..0.99]
[0.1,0.3,0.5,0.7,0.8999999999999999]
Run Code Online (Sandbox Code Playgroud)

但这有点糟糕.也许有一种更清洁的方式.对于这个简单的例子,当然,我可以使用范围[0.1,0.3..0.9],一切都很好.

但是在一个更复杂的例子中,我可能不会很快知道(或者想弄清楚,如果我是懒惰的)我应该使用的确切上限.那么,我只需要制作一系列整数然后除以10,对吧?不:

ghci> map (/10) [1,3..10]
[0.1,0.3,0.5,0.7,0.9,1.1]
Run Code Online (Sandbox Code Playgroud)

任何浮点函数似乎都会导致此行为:

ghci> map (*1.0) [1,3..10]
[1.0,3.0,5.0,7.0,9.0,11.0]
Run Code Online (Sandbox Code Playgroud)

而非浮动函数则不:

ghci> map (*1) [1,3..10]
[1,3,5,7,9]
Run Code Online (Sandbox Code Playgroud)

虽然看起来不太可能,但我认为可能还有一些懒惰的评估在起作用,并试图首先强制评估范围:

ghci> let list = [1,3..10] in seq list (map (*1.0) list)
[1.0,3.0,5.0,7.0,9.0,11.0]
Run Code Online (Sandbox Code Playgroud)

显然,使用文字列表而不是范围工作正常:

ghci> map (*1.0) [1,3,5,7,9]
[1.0,3.0,5.0,7.0,9.0]

ghci> let list = [1,3,5,7,9] in seq list (map (*1.0) list)
[1.0,3.0,5.0,7.0,9.0]
Run Code Online (Sandbox Code Playgroud)

它不只是映射:

ghci> last [1,3..10]
9

ghci> 1.0 * (last [1,3..10])
11.0
Run Code Online (Sandbox Code Playgroud)

如何将函数应用于范围的结果会影响该范围的实际评估结果?

floating-point haskell range

7
推荐指数
1
解决办法
497
查看次数

Yii - 如何通过管理页面上的外键/相关键列进行搜索?

在我的数据库中,我有两个表,制造商和塑料:

CREATE TABLE `manufacturer` (                                                                   
  `id` int(11) NOT NULL AUTO_INCREMENT,                                                                          
  `name` varchar(64) DEFAULT NULL,                                                                               
  PRIMARY KEY (`id`)                                                                                             
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8

CREATE TABLE `plastic` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL DEFAULT '',
  `manufacturer_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`,`manufacturer_id`),
  KEY `manufacturer_id` (`manufacturer_id`),
  CONSTRAINT `plastic_ibfk_1` FOREIGN KEY (`manufacturer_id`) REFERENCES `manufacturer` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=68 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,塑料具有Yii称之为与制造商的BELONGS_TO关系 - 一个制造商可以制造几种不同的塑料.

我试图通过默认塑料管理页面中的制造商名称进行搜索,但搜索字段不会显示在"制造商"列中.我遵循了这个指南,我想我差不多了,但是我被困在一个小细节上.

在我的Plastic模型类中,根据上面的链接,我有:

class Plastic extends CActiveRecord
{
public $manufacturer_search; …
Run Code Online (Sandbox Code Playgroud)

php search activerecord foreign-keys yii

2
推荐指数
1
解决办法
6743
查看次数

标签 统计

activerecord ×1

floating-point ×1

foreign-keys ×1

haskell ×1

php ×1

range ×1

search ×1

yii ×1